美文网首页
webpack 有哪些可优化的点

webpack 有哪些可优化的点

作者: good__day | 来源:发表于2019-01-19 15:48 被阅读0次

一、针对 production 优化:

1、懒加载、按需加载 code-split:  

react-loadable react-loadable/webpack

2、压缩:

 js webpack/lib/optimize/UglifyJsPlugin

 es6  uglifyjs-webpack-plugin

    es6 性能更好, 代码更少。要防止babel-loader转换ES6代码,要去掉 babel-preset-env,因为它把6转换为5。

图 @svgr/webpack  

css  

cssnano基于PostCSS,不仅是删掉空格,还能理解代码含义,例如把color:#ff0000转换成color:red,css-loader内置了cssnano,只需要使用css-loader?minimize就可以开启cssnano压缩。

另外一种压缩CSS的方式是使用PurifyCSSPlugin,需要配合extract-text-webpack-plugin使用,它主要的作用是可以去除没有用到的CSS代码,类似JS的Tree Shaking。

3、tree shaking   

如 lodash 、svg 的编译时引入

mode: product 默认开启 treeshaking

tree shaking 是依赖编译时分析依赖,所以只对 es6 模块语法有效

4、publicPatch   配置 CDN

5、提取公共代码与第三方代码

相同的资源被重复的加载,浪费用户的流量和服务器的成本;

每个页面需要加载的资源太大,导致网页首屏加载缓慢,影响用户体验。 如果能把公共代码抽离成单独文件进行加载能进行优化,可以减少网络传输流量,降低服务器成本

在webpack4.0 optimization.splitChunks替代了CommonsChunkPlugin

vendors 提取公共代码

6、externals

如果我们想引用一个库,但是又不想让webpack打包,并且又不影响我们在程序中以CMD、AMD或者window/global全局等方式进行使用,那就可以通过配置externals。

例如从 CDN 中引入 jquery 或 lodash 等库时,就可以把 externals 中配置上 jquery 和 lodash

二、构建速度优化:

1、缩小文件搜索范围

      resolve.modules

      resolve.mainFields

      resolve.extensions

      module.noParse

      配置loader时,通过test、exclude、include缩小搜索范围

2、webpack/lib/DllPlugin  减少基础模块编译次数?

3、使用HappyPack开启多进程Loader转换?

4、babel-loader?cacheDirectory  使用缓存

https://www.webpackjs.com/loaders/babel-loader/#babel-loader-%E5%BE%88%E6%85%A2-

5、resolve.extensions  

import 时不写扩展名时的,扩展名匹配顺序配置

6、module.noParse

用了 noParse 的模块将不会被 loaders 解析,所以当我们使用的库如果太大,并且其中不包含 import require、define的调用,我们就可以使用这项配置来提升性能, 让 Webpack 忽略对部分没采用模块化的文件的递归解析处理。

7、区分环境,减少不必要的程序

如: 可以配置 mode

可以在非 production 环境,可以不压缩

二、开发体验优化:

1、别名: resolve/alias  引入文件更简洁

2、减少不必要的编译,提升开发时构建速度

        devServer :{

                 watch:true,

                 watchOptions: {

                    ignored:/node_modules/,

                    aggregateTimeout:300,//文件变动后多久发起构建,越大越好

                    poll:1000,//每秒询问次数,越小越好

                }

     }

3、cheap-module-eval-source-map 这种 source map 的构建速度比较快

4、实时重新加载(live reloading) 和 模块热替换(HMR)

webpack-dev-server  + devServer  ctrl+s时,浏览器自动重刷

HotModuleReplacementPlugin +  hot: true // 开启HMR

参考:

https://juejin.im/post/5abbc2ca5188257ddb0fae9b

https://juejin.im/post/5ac769e7f265da237b225490

https://juejin.im/post/5ac76a8f51882555677ecc06

https://juejin.im/post/5b652b036fb9a04fa01d616b

1、更高版本的 webpack 和 node 版本。

2、多进程 thread-loader 并行解析编译

3、多进程并行压缩 ParalleUglifyPlugin   Terser-webpack-plugin

4、分包

  html-webpack-externals-plugin  不打基础库的包,直接用 cdn 资源

 split-chunks  还是每次会对基础包进行分析

预编译资源模块 DLLPlugin DLLReferencePlugin 对 react react-dom 以及业务基础包打包成一个文件

5、利用缓存

babel-loader 开启缓存

Terser-webpack-plugin 开启缓存

cache-loaer hard-source-webpack-plugin

6、缩小文件查找范围

babel-loader exclude: 'node_modules'

resolve.modules

resolve.mainFields

resolve.extensions

合理使用 alias

7、tree shaking

要求 es6 语法,.babelrc 的 modules:false, webpack mode 为 production  默认开启 treeshaking

puregecss-webpack-plugin搭配mini-css-extract-plugin

8、webpack 图片压缩

image-wenpack-loader

9、动态 pollyfill 优化体积

babel-pollyfill 是非必需和不变的  pollyfill.io

相关文章

  • webpack 有哪些可优化的点

    一、针对 production 优化: 1、懒加载、按需加载 code-split: react-loadable...

  • webpack记录哪些优化的点

    1 使用dllplugin 将第三方依赖分离2 使用cdn引入第三方依赖,在external中放入模块名,然后删除...

  • webpack打包优化

    实现webpack打包优化,有两个优化点: 如何减少打包时间 如何减少打包大小 减少打包时间 优化Loader对于...

  • webpack之tree shaking优化打包体积

    前言 大家都知道webpack可以使用tree shaking优化webpack打包,但是使用时还是有几个点要注意...

  • webpack之tree shaking优化打包体积

    前言 大家都知道webpack可以使用tree shaking优化webpack打包,但是使用时还是有几个点要注意...

  • 前端优化

    前端性能优化的方法有哪些? ①减少http请求,减少请求的体积,比如用雪碧图,gulp或者webpack压缩文件 ...

  • webpack5

    Webpack 5 中的效率优化点 Persistent CachingCache 基本配置在 Webpack 4...

  • 面试问题总结

    1.前端性能优化的方法有哪些? ①减少http请求,减少请求的体积,比如用雪碧图,gulp或者webpack压缩文...

  • 性能优化+打包构建

    性能优化 webpack-bundle-analyzerwebpack构建优化webpack分包webpack g...

  • 使用webpack的注意点

    作者:叶茂;标签: webpack,兼容性 知识点 webpack简要介绍 打包前端代码,优化前端工作流。 注意点...

网友评论

      本文标题:webpack 有哪些可优化的点

      本文链接:https://www.haomeiwen.com/subject/htiodqtx.html