su37josephxia / frontend-interview

前端面试知识点
MIT License
159 stars 45 forks source link

谈谈通过webpack配置优化实现页面性能提升 #104

Open su37josephxia opened 2 years ago

su37josephxia commented 2 years ago

⽤webpack优化前端性能是指优化webpack的输出结果,让打包的最终结果在浏览器运⾏快速⾼效。

压缩代码:删除多余的代码、注释、简化代码的写法等等⽅式。可以利⽤webpack的 UglifyJsPlugin 和 ParallelUglifyPlugin 来压缩JS⽂件, 利⽤ cssnano (css-loader?minimize)来压缩css 利⽤CDN加速: 在构建过程中,将引⽤的静态资源路径修改为CDN上对应的路径。可以利⽤webpack对于 output 参数和各loader的 publicPath 参数来修改资源路径 Tree Shaking: 将代码中永远不会⾛到的⽚段删除掉。可以通过在启动webpack时追加参数 --optimize-minimize 来实现 Code Splitting: 将代码按路由维度或者组件分块(chunk),这样做到按需加载,同时可以充分利⽤浏览器缓存 提取公共第三⽅库: SplitChunksPlugin插件来进⾏公共模块抽取,利⽤浏览器缓存可以⻓期缓存这些⽆需频繁变动的公共代码

674252256 commented 2 years ago

压缩代码:删除多余的代码、注释、简化代码的写法等等⽅式。可以利⽤webpack 的 UglifyJsPlugin 和 ParallelUglifyPlugin 来压缩JS⽂件, 利⽤ cssnano (css-loader?minimize)来压缩css 利⽤CDN加速: 在构建过程中,将引⽤的静态资源路径修改为CDN上对应的路径。可以利⽤webpack对 于 output 参数和各loader的 publicPath 参数来修改资源路径 Tree Shaking: 将代码中永远不会⾛到的⽚段删除掉。可以通过在启动webpack时追加参数 --optimize-minimize 来 实现Code Splitting: 将代码按路由维度或者组件分块(chunk),这样做到按需加载,同时可以充分利⽤浏览器缓存 提取公共第三⽅库: SplitChunksPlugin插件来进⾏公共模块抽取,利⽤浏览器缓存可以⻓期缓存这些⽆需频繁变动的 公共代码

zcma11 commented 2 years ago

压缩代码,分 chunk,tree shaking,提取 css,压缩css,将比较小的资源转base64。optimization.concatenateModules 减少多余模块。开启 production,使用 webpack 默认的优化。

QbjGKNick commented 2 years ago

webpack 配置优化

jiafei-cat commented 2 years ago

如何通过webpack配置优化页面性能(注意是页面性能而不是webpack打包性能) 首先webpack打包的时候要选定production模式,开启该模式会启用tree-sharking 代码压缩 chunk优化等,但是想进一步chunk优化需要使用optimization 的配置项,例如抽取支持模块化的公共代码需要开启runtimeChunk配置项,自定义抽取chunk规则,需要配置splitChunkscacheGroups。打包出来的文件写插件上传到OSS,并将publicPath指定为CDN地址。CSS方面的话使用mini-css-extract-plugin(webpackV5)抽取单独的css文件并且也放OSS。第三方的组件库,象antd类的使用babel-plugin-import支持动态引入。项目整体而言象SPA页面可以做SSG, 利用prerender插件生成非用户相关页面加快第一次访问速度。当然最主要是通过webpack-bundle-analyzerlighthouse的报告分析是什么影响的页面性能。

superjunjin commented 2 years ago
crazyyoung1020 commented 2 years ago

利用webpack提升页面性能,我们从以下几个维度考虑

  1. 压缩文件,减小文件体积
    • 压缩js,官方推荐terser-webpack-plugin
    • 压缩css,通过css-minimizer-webpack-plugin配置
    • 压缩html,通过HtmlWebpackPlugin插件的minify来配置
    • 压缩图片,通过image-webpack-plugin配置
  2. 提取公共代码, 减小服务器压力,通过commons-chunk-plugin配置
  3. 分包,通过split-chunks-plugin,去控制包体积大小,超过一定体积则分包
  4. treeshaking,通过配置usedExports为true来对未被引用的模块做标记,通过sideEffects告诉webpack哪些文件不用处理,或者都可以处理。然后再交给terser去做tree-shaking消除无效代码
rachern commented 2 years ago

webpack如何提升页面性能

wzl624 commented 2 years ago

1.压缩代码。删除多余的代码、注释、简化代码的写法等等方式。可以利用webpack的UglifyJsPlugin和ParallelUglifyPlugin来压缩JS文件, 利用cssnano(css-loader?minimize)来压缩css 2.利用CDN加速。在构建过程中,将引用的静态资源路径修改为CDN上对应的路径。可以利用webpack对于output参数和各loader的publicPath参数来修改资源路径 3.删除死代码(Tree Shaking)。将代码中永远不会走到的片段删除掉。可以通过在启动webpack时追加参数--optimize-minimize来实现 4.提取公共代码。