webpack的优化策略

小云云
小云云 原创
2018-02-23 13:09:52 850浏览

在我们构建单页面应用(vue, React)或封装插件时,很大机会用到webpack,这个JavaScript的打包工具.
但项目代码日益增多时,webpack一些简单的配置会暴露种种弊端(打包时间长,代码大).
以下是结合自身开发和学习webpack过程解决问题的总结.

打包时间长

DllPlugin

很多人都知道webpack.optimize.CommonsChunkPlugin这个插件是用来提取公共库的,但这个插件也解决不了公共库重复打包的问题.
然而,DllPlugin这个插件就可以解决.
这个插件会先把公共库打包.
它自己拥有独立的webpack配置文件,配置文件入口处是需要打包的公共库.
当它打包完后,会生成公共的js包和manifest.json.
manifest.json是用来让主配置文件DLLReferencePlugin映射到相关的依赖上去的

devtool cheap-module-eval-source-map

当我们使用webpack打包后的代码都经过编译的,所以变得难以调试.
所以webpack给了devtool的api,会通过Source Map找出出错的正确位置.
选择devtool的cheap-module-eval-source-map原因是,每个模块使用eval()大幅提高持续构建效率和没有生成列映射节省构建时间(浏览器引擎会自动给出列信息).

性能优化

样式的分离与压缩

使用extract-text-webpack-plugin将各个脚本里的样式提取到出来.
如果设置allChunks: true会使提取出来的样式合并到一个文件.
使用optimize-css-assets-webpack-plugin将样式进行压缩.

脚本的压缩

使用uglifyjs-webpack-plugin将脚本进行压缩.

js性能优化

webpack每个模块都会放入一个闭包函数中.
使用webpack.optimize.ModuleConcatenationPlugin会将相关联的模块放入一个闭包里.
从而减少闭包的数量.

提取公共代码

使用DllPluginwebpack.optimize.CommonsChunkPlugin会将公共的代码提取出来打包到其他文件.
避免重复打包,从而减少包的大小.

服务器预压缩

当服务开启预压缩时.
会优先获取以文件名称加.gz结尾的文件,这份文件是压缩过后的文件,体积会小.
使用CompressionWebpackPlugin会生成对应压缩文件.

相关推荐:

react、webpack、跨域代理多页面

Vue+webpack基础配置分享

webpack项目的网络优化代码分享



以上就是webpack的优化策略的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。