webpack5性能优化

这篇具有很好参考价值的文章主要介绍了webpack5性能优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

webpack构建速度

一、优化babel-loader 

 注意:开启缓存,配置后打包是就能缓存babel

  • webpack.common.js文件命中缓存cacheDirectory

        Directory/dəˈrektəri/目录;

 webpack5性能优化,webpack,webpack,前端,javascript

{
    test: /\.js$/,
    use: ['babel-loader?cacheDirectory'],
    include: srcPath,
    exclude: /node_modules/
},

测试: 

  • 打包后的结果: 

注意:打包后promise的打包文件会变化文件名

webpack5性能优化,webpack,webpack,前端,javascript

  

二、IgnorePlugin避免引入无用模块

注意:引入第三方模块,模块可能有许多东西是我们不需要的,而引入时会默认引入所有JS,代码量过大。 IgnorePlugin可以实现忽略文件,不进行打包。

// 忽略 moment 下的 /locale 目录
new webpack.IgnorePlugin({
    resourceRegExp: /\.\/locale/, contextRegExp: /moment/
})

测试不配置IgnorePlugin: 

  • 安装插件 
sudo cnpm i moment -D
  •  src目录下index.js代码
import moment from 'moment'
moment.locale('zh-cn')
console.log('locale',moment.locale());
console.log('data',moment().format('ll'));
  • 运行 npm run build打包代码

注意:打包出来的代码index.js文件有400多kb 

 测试配置IgnorePlugin:

  • webpack.prod.js文件的plugins
// 忽略 moment 下的 /locale 目录
new webpack.IgnorePlugin({
    resourceRegExp: /\.\/locale/, contextRegExp: /moment/
})
  • index.js文件中按需引入 

 webpack5性能优化,webpack,webpack,前端,javascript

注意:打包出来的index.js文件小了200多kb,因为用了IgnorePlugin所以moment没有进行打包,而少的200kb就是moment的语言包

三、noParse避免重复打包

注意: 因为min.js后缀名的文件是已经采用模块化处理过的了,所以不需要进行重新打包。直接用noParse的方式进行过滤掉。

webpack5性能优化,webpack,webpack,前端,javascript

对比、IgnorePlugin和noParse的区别

注意:IgnorePlugin直接不引入,代码中没有。

           noParse引入,但是不打包

四、happyPack多进程打包

注意:JS单线程,开启多进程打包。提高构件速度(特别书多核CPU)

  • 安装插件
sudo cnpm i happypack -D
  • 将webpack.common.js文件中关于babel-loader的配置移动到webpack.dev.js文件中去,
  • webpack.prod.js的module.rules中配置babel-loader

 webpack5性能优化,webpack,webpack,前端,javascript 

{
    test: /\.js$/,
    use: ['happypack/loader?id=babel'],
    include: srcPath,
    exclude: /node_modules/
},
  •  plugins里new happyPack
new HappyPack({
    // 用唯一的标识符 id 来代表当前的 HappyPack 是用来处理一类特定的文件
    id: 'babel',
    // 如何处理 .js 文件,用法和 Loader 配置中一样
    loaders: ['babel-loader?cacheDirectory'],
    // ... 其它配置项
}),

测试

  • 执行npm run build

注意:打包完成没什么效果,只是比正常打包快而已,但是打包过程中的代码里会有happy打包的字样出现

webpack5性能优化,webpack,webpack,前端,javascript

五、ParallelUglifyPlugin多进程压缩JS

 Parallel/ˈpærəlel/平行的;

 uglify混淆

注意:JS是单线程,开启多进程压缩更快。和happypack原理相同

  • 安装插件
sudo cnpm i webpack-parallel-uglify-plugin -D
  • 在webpack.prod.js文件中引入
const ParallelUglifyPlugin = require('webpack-parallel-uglify-plugin')
  •  在webpack.prod.js文件中的plugins新建一个
// 使用 ParallelUglifyPlugin 并行压缩输出的 JS 代码
new ParallelUglifyPlugin({
    // 传递给 UglifyJS 的参数
    // (还是使用 UglifyJS 压缩,只不过帮助开启了多进程)
    uglifyJS: {
        output: {
            beautify: false, // 最紧凑的输出
            comments: false, // 删除所有的注释
        },
        compress: {
            // 删除所有的 `console` 语句,可以兼容ie浏览器
            drop_console: true,
            // 内嵌定义了但是只用到一次的变量
            collapse_vars: true,
            // 提取出出现多次但是没有定义成变量去引用的静态值
            reduce_vars: true,
        }
    }
})

测试:

  • 执行npm run build

正常打包出文件,打包程序内代码会出现多个进程一起打包的情况

webpack5性能优化,webpack,webpack,前端,javascript

 注意:项目较大、直接打包太慢、开启多进程打包速度会更快

            项目较小、直接打包快、开启 多进程打包速度会变慢

六、热更新

  1. 自动刷新:整个网页全部刷新,速度较慢
  2. 自动刷新:整个网页全部刷新,状态会丢失
  3. 热更新:新代码生效、网页不刷新,状态不丢失
  • 在webpack.dev.js下引入
const HotModuleReplacementPlugin = require('webpack/lib/HotModuleReplacementPlugin');
  • 在webpack.dev.js下修改entry的内容

webpack5性能优化,webpack,webpack,前端,javascript  

index: [
    'webpack-dev-server/client?http://localhost:8080/',
    'webpack/hot/dev-server',
    path.join(srcPath, 'index.js')
],
  • plugins里去new以下

webpack5性能优化,webpack,webpack,前端,javascript

new HotModuleReplacementPlugin()
  • devServer里 

webpack5性能优化,webpack,webpack,前端,javascript

hot: true,

 测试:

  • npm run dev

webpack5性能优化,webpack,webpack,前端,javascript

  • 现在去修改代码 

webpack5性能优化,webpack,webpack,前端,javascript

注意:做了热更新后,不去手动刷新,状态不会更改,但是如果手动刷新状态会一起修改 

  • 当前文件监听之外的东西就需要进行配置

 webpack5性能优化,webpack,webpack,前端,javascript

// 增加,开启热更新之后的代码逻辑
if (module.hot) {
    module.hot.accept(['./math'], () => {
        const sumRes = sum(10, 30)
        console.log('sumRes in hot', sumRes)
    })
}

注意:这样配置里就可以达到不同文件之间也实现热更新

七、DllPlugin动态链接库文章来源地址https://www.toymoban.com/news/detail-559920.html

  1.  前端框架如Vue、React体积大构件慢
  2. 比较稳定不常升级版本
  3. 同一个版本只构建一次即可,不用每次都重新构建

webpack已内置DllPlugin支持

DllPlugin-打包出dll文件

DllReferencePlugin--使用dll文件

到了这里,关于webpack5性能优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端工程化面试题】使用 webpack 来优化前端性能/ webpack的功能

    这个题目实际上就是来回答 webpack 是干啥的,你对webpack的理解,都是一个问题。 (1)对 webpack 的理解 webpack 为啥提出 + webpack 是啥 + webpack 的主要功能 前端开发通常是基于模块化的,为了提高开发效率,webpack 是一个基于模块的构建工具,是一个用于 js 应用程序的静态模块

    2024年02月20日
    浏览(58)
  • webpack基础知识八:说说如何借助webpack来优化前端性能?

    一、背景 随着前端的项目逐渐扩大,必然会带来的一个问题就是性能 尤其在大型复杂的项目中,前端业务可能因为一个小小的数据依赖,导致整个页面卡顿甚至奔溃 一般项目在完成后,会通过webpack进行打包,利用webpack对前端项目性能优化是一个十分重要的环节 二、如何优

    2024年02月14日
    浏览(40)
  • 前端知识点、技巧、webpack、性能优化(持续更新~)

    可以把  图片转换成  base64  放在src里面   减少服务器请求  但是图片会稍微大一点点 以上的方法不需要一个一个自己转化 可以在webpack  进行 性能优化   (官网有详细描述)

    2024年03月10日
    浏览(46)
  • 用webpack做一些前端打包时的性能优化

    一.webpack 的五个核心概念 1.Entry:入口指示,webpack以哪个文件为入口起点开始打包,分析构建内部依赖图 2.output:输出指示,webpack打包后的资源bundles输出到哪里去,以及如何命名 3.loader :loader让webpack能够去处翻译理那些非js文件(img css…) 4.Plugins :Plugins插件可以用于执行范围

    2024年02月12日
    浏览(50)
  • 【webpack5】高级优化

    本章节主要介绍 Webpack 高级配置。 所谓高级配置其实就是进行 Webpack 优化,让我们代码在编译/运行时性能更好~ 我们会从以下角度来进行优化: 提升开发体验 提升打包构建速度 减少代码体积 优化代码运行性能 为什么 开发时我们运行的代码是经过 webpack 编译后的,例如下面

    2024年01月18日
    浏览(49)
  • 前端工程化第一章:webpack5基础(上)

    Webpack 是一个现代 JavaScript 应用程序的静态模块 打包器 。它是一个用于 将代码编译成浏览器可识别的格式 的工具。 webpack 可以实现以下的功能: 代码转换 : TypeScript 编译成 JavaScript 、 SCSS 、 less 编译成 CSS 等。 文件优化 :压缩 JavaScript 、 CSS 、 HTML 代码, 压缩合并图片

    2024年02月16日
    浏览(47)
  • 前端工程化第三章:webpack5基础(下)

    TypeScript 是一种静态类型的编程语言,是 JavaScript 的一个超集。它由 微软开发,提供了许多 JavaScript 不支持的功能,比如 类型检查 、 接口和类 。 ts-loader 是 Webpack 中的一个加载器,用于将 TypeScript 代码转换成 JavaScript 代码。它是基于 typescript 编译器实现的,支持所有 TypeS

    2024年02月16日
    浏览(50)
  • 基于vue3+webpack5+qiankun实现微前端

    一 主应用改造(又称基座改造) 1 在主应用中安装qiankun(npm i qiankun -S)  2 在src下新建micro-app.js文件,用于存放所有子应用。  3 改造vue.config.js,允许跨域访问子应用页面  4 改造main.js   5 在App.vue中写响应跳转子应用(根据自己的项目找对应位置写,不局限于App.vue)   需要注

    2024年02月13日
    浏览(62)
  • 前端性能优化的利器 ——— 浅谈JavaScript中的防抖和节流

    防抖和节流函数是工作中两种常用的前端性能优化函数,今天我就来总结一下什么是防抖和节流,并详细说明一下如何在工作中应用防抖和节流函数 在 JavaScript 中,防抖(debounce)和节流(throttle)是用来限制函数执行频率的两种常见技术。 防抖(debounce) 是指在某个时间段

    2024年02月14日
    浏览(51)
  • 《基于 Vue 组件库 的 Webpack5 配置》7.路径别名 resolve.alias 和 性能 performance

    路径别名 resolve.alias 性能 performance

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包