前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >移动web端上如何有效的控制包大小

移动web端上如何有效的控制包大小

原创
作者头像
brzhang
修改2021-08-26 14:57:03
9390
修改2021-08-26 14:57:03
举报

近些年,移动应用的爆发式增在,也给移动web端带来了一些新的话题,那就是怎么有效控制移动web端代码膨胀的问题,现在的一些工具如webpack都确确实实很好用,但是大家有没有发现一个问题,稍稍不注意,webpack给你整一个几M的bundle出来,然后下面是用户面对你网站的表情。

title slide
title slide

虽然说,在网络环境相对较好的发达地域来说,使用pc web访问网站体验可以做得很好,但是,一旦换一个网络环境没那么好的地方,那就呵呵了,当面面对这样的严峻考验,开发者们通常的做法是:

  1. 压缩代码,目的自然是使得代码变得更小,加载自然而然会更快点;
  2. 多地域部署,让网络环境差的地方尽可能少的减少数据包在互联网上的穿梭时间;
  3. CDN等措施,缓解网站压力,将一部分流量 如静态图片,js等分流到 CDN上;

但是今天,这里的猪脚是如何来做好压缩代码,尤其是针对移动web端。

移动web端有个特点,那就是对弱网+静态bundle过大会尤其敏感,反映到用户头上就是打开巨慢,因为无论是吞吐量,解析代码的耗时(cpu),可使用的内存,耗电等问题都是影响因素。

这些都是一些老生常谈了,但是在开发的时候,又有多少人能够实践得很好呢?

在引入包时就告知你大小

我们可能使用过这样一个工具, webpack-bundle-analyzer ,这个工具的确非常好用,但是我们有没有想过,有没有办法在我引入一个工具包的时候,就告知我大小,比如,那个lodash的库,也许我只是使用了一个节流函数,完全没必要引入整个 lodash 库。

这个工具就是,前一篇文章介绍的那个Import-Cost 的工具,那么,他的原理是什么呢?

Import-Cost 的原理

Import-Cost 就是去监听当前编辑的窗口文件的变化,如果所检测到变化,放心他这里做了防抖了,他就会通过 TypescriptBabylon AST 去解析和编译一个 import所需的资源,他这个只管第三方引入,举个例子:

上图就是只去做了 react,react-dom,lodash/uniqueId 的检查,其他的import因为是引用的用户自己目录下的资源,所以被排除在外;

这个工具其实是站在了webpack这个巨人的肩膀上,比如,他利用了 babili-webpack minifier 这个插件的分析能力,这样 tree shaking 的特性也加持了,然后,这个工具在分析的时候,还使用了 worker-farm 这个库,去开启多进程分析的能力,我们可以想一想,多个import如果一个个分析估计会比较慢,所以,他一个import都会交给一个 worker-farm 去处理,所以看起来结果是秒出。

缓存

我也尝试着找下可以不可以给作者提一个优化的feature,比如可以不可以加一个计算结果的缓存,然而,作者也给加上了。走到这里,可以所这个工具基本上也已经没有什么可以优化的工具,做这么一个特性几乎是接近与完美的程度了,其实我们也不妨把这些思路用在自己的日常工作处理中。

做任务--->发现任务比较耗时-->可以分解为多线(进)程处理吗--->结果可以缓存吗?

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在引入包时就告知你大小
  • Import-Cost 的原理
  • 缓存
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档