如何⽤webpack来优化前端性能?

webpack是一个现代化的前端打包工具,它可以将多个模块打包成一个或多个静态资源文件。
通过配置文件,你可以定义入口文件和出口文件,以及一系列的加载器(loader)和插件(plugins)来处理不同类型的文件。

以下是一个简单的webpack配置示例:

const path = require('path');

module.exports = {
  entry: './src/index.js', // 入口文件
  output: {
    filename: 'bundle.js', // 出口文件
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.js$/, // 使用loader处理以.js结尾的文件
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader' // 使用babel-loader进行转译
        }
      },
      {
        test: /\.css$/, // 使用loader处理以.css结尾的文件
        use: ['style-loader', 'css-loader'] // 先使用css-loader解析css文件,再使用style-loader将样式插入到页面中
      }
    ]
  },
  plugins: [
    // 插件配置
  ]
};

通过运行webpack命令,webpack会根据配置文件进行打包处理,生成最终的静态资源文件。
webpack的主要功能包括模块化管理、代码分割、文件压缩、静态资源优化等。

⽤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插件来进⾏公共模块抽取,
利⽤浏览器缓存可以⻓期缓存这些⽆需频繁变动的公共代码
有哪些常⻅的Loader?


file-loader:把⽂件输出到⼀个⽂件夹中,在代码中通过相对 URL 去引⽤输出的⽂件
url-loader:和 file-loader 类似,但是能在⽂件很⼩的情况下以 base64 的⽅式把⽂件内容注⼊到代码中去
source-map-loader:加载额外的 Source Map ⽂件,以⽅便断点调试
image-loader:加载并且压缩图⽚⽂件
babel-loader:把 ES6 转换成 ES5
css-loader:加载 CSS,⽀持模块化、压缩、⽂件导⼊等特性
style-loader:把 CSS 代码注⼊到 JavaScript 中,通过 DOM 操作去加载 CSS。
eslint-loader:通过 ESLint 检查 JavaScript 代码
有哪些常⻅的Plugin?

define-plugin:定义环境变量
html-webpack-plugin:简化html⽂件创建
uglifyjs-webpack-plugin:通过 UglifyES 压缩 ES6 代码
webpack-parallel-uglify-plugin: 多核压缩,提⾼压缩速度
webpack-bundle-analyzer: 可视化webpack输出⽂件的体积
mini-css-extract-plugin: CSS提取到单独的⽂件中,⽀持按需加载
分别介绍bundle,chunk,module是什么


bundle:是由webpack打包出来的⽂件
chunk:代码块,⼀个chunk由多个模块组合⽽成,⽤于代码的合并和分割
module:是开发中的单个模块,在webpack的世界,⼀切皆模块,⼀个模块对应⼀个⽂件,webpack会从配置的
entry中递归开始找出所有依赖的模块
Loader和Plugin的不同?

不同的作⽤:
Loader直译为"加载器"。Webpack将⼀切⽂件视为模块,但是webpack原⽣是只能解析js⽂件,
如果想将其他⽂件也打包的话,就会⽤到 loader 。 所以Loader的作⽤是让webpack拥有了加载和
解析⾮JavaScript⽂件的能⼒。


Plugin直译为"插件"。Plugin可以扩展webpack的功能,
让webpack具有更多的灵活性。 在 Webpack 运⾏的⽣命
周期中会⼴播出许多事件,Plugin 可以监听这些事件,在合适的时机通过 Webpack 
提供的 API 改变输出结果。



webpack⾯试题

不同的⽤法:
Loader在 module.rules 中配置,也就是说他作为模块的解析规则⽽存在。 类型为数组,每⼀项都是⼀
个 Object ,⾥⾯描述了对于什么类型的⽂件( test ),使⽤什么加载( loader )和
使⽤的参数( options )



Plugin在 plugins 中单独配置。 类型为数组,每⼀项是⼀个 plugin 的实例,参数都通过构造函数传⼊。
如何提⾼webpack的构建速度?

1. 多⼊⼝情况下,使⽤ CommonsChunkPlugin 来提取公共代码
2. 通过 externals 配置来提取常⽤库
3. 利⽤ DllPlugin 和 DllReferencePlugin 预编译资源模块 通过 DllPlugin 
4. 来对那些我们引⽤但是绝对不会修改的npm
包来进⾏预编译,再通过 DllReferencePlugin 将预编译的模块加载进来。

5. 使⽤ Happypack 实现多线程加速编译
6. 
7. 使⽤ webpack-uglify-parallel 来提升 uglifyPlugin 的压缩速度。 原理上 webpack-uglify-parallel 采⽤了多核并⾏压缩来提升压缩速度
8. 使⽤ Tree-shaking 和 Scope Hoisting 来剔除多余代码
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

都挺好,刚刚好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值