打包
常见问题
- lodash 和 react gzip 后的体积是多少 (定性,可以给出范围)
- 打包 moment 时会有什么问题
- 你们线上前端项目首屏静态资源 gzip 后的体积是多少
原则
一般谈到打包会有两方面的意思,第一在于提高打包的速度,第二在于对打包后的静态资源的优化。而对于静态资源的优化又不仅仅是打包提及的缩减。
对于打包资源优化的总体原则,在于尽可能的减少或者延迟模块的引用。主要遵循以下三点
- 减小打包的整体体积
- Code Splitting: 按需加载,优化页面首次加载体积。如根据路由按需加载,根据是否可见按需加载
- Bundle Splitting:分包,根据模块更改频率分层次打包,充分利用缓存
减小打包的整体体积
第一种方法是减小打包的整体体积。减小打包的总体积有多种方式,这往往也是打包资源优化的着力点,一方面操作性高易于实践,另一方面有具体数据支撑易于 写 PPT 来晋升。我从网站性能优化的实践角度,来分为以下几个方面
代码压缩
代码压缩可以非常可观地减小资源打包体积,但是它的可操作性空间过小。可操作性低的意思是这一项不太容易出现在晋级评审的 PPT 上,如同 CDN 在网站性能优化的重要程度一样,重要但不归你做(或者傻瓜式配置)。
它良好的模块化,以致于 webpack 就自作主张在生产环境中默认把这件事给做了。
那它是如何压缩代码的?最典型的两种方法就是空白符替换以及缩短变量名,如代码所示,仅仅通过这两种方式就大大压缩了 javascript 资源:
移除不必要的模块
句话好像是废话,但它却是真正有用并且极为容易实现的一点。
在以下代码中,对 lodash 这个模块进行了引入,但在之后的代码中并无使用 lodash,那在 webpack 中这个模块还会继续打包吗?
很遗憾,仍会对它进行打包。但好消息是这一点优化起来相当简单。
对于这类问题总应该防患于未然,扼杀于摇篮中。eslint 的用武之地来了,它除了统一团队的代码风格以外,也用来提高团队的代码质量以及性能。