服务器webpack构建性能,webpack性能优化——构建效率(一)

主题:本条博客主要围绕webpack提高构建效率,减少打包时间。

一、CDN引入

在项目中,平常会引入一些第三方依赖,类似于echarts、jquery。这样打包后的vendor.js非常大,可以将第三方库以cdn方式引入,也可以将资源下载到服务器引入。

1.webpack配置externals

entry: ... ,

output: ... ,

// 外部引用,不需要打包

externals:{

jquery:‘$‘,

echarts: ‘echarts‘

},

...

2.html中通过script标签引入资源(echarts cdn地址:

3.import引入

4.文件大小和构建速度对比

*使用cdn引入

245e4bd165e61c4dc0f162df878f69c4.png

*未使用cdn

1e0bd83c62299a3f2ce192cbdbf07fca.png

二、优化Loader

loader能够加载资源文件并进行特定处理,所以在查找匹配资源文件时我们可以使用exclude和include缩小搜索范围来优化效率。

{

test: /\.js$/,

loader: ‘babel-loader?cacheDirectory‘,

include: projectRoot,

exclude: /node_modules/

}

三、DllPlugin

DLLPlugin和 DDLReferencePlugin通过拆分 bundles提升构建的速度。可以将特定类库提前打包然后引入。

1.单独新建配置文件webpack.dll.conf.js

const path = require(‘path‘);

const webpack = require(‘webpack‘);

module.exports = {

mode: ‘development‘,

entry: {

// 一般将不经常更新的依赖预先打包

vendor: [‘vue‘,‘vuex‘,‘vue-router‘,‘axios‘]

},

output: {

path: path.resolve(__dirname,‘dist‘),

filename: ‘[name].dll.js‘,

library: ‘_dll_[name]‘

},

plugins:[

new webpack.DllPlugin({

context: __dirname,

// name需要和output内的library保持一致

name: ‘_dll_[name]‘,

// DLLPlugin会生成一个mainfest.json文件,用来将DDLReferencePlugin映射到相关依赖。

path: path.resolve(__dirname, ‘dist‘, ‘mainfest.json‘)

})

]

}

2.webpack.conf.js中配置plugin

new webpack.DllReferencePlugin({

context: __dirname,

manifest: path.resolve(__dirname,‘dist‘,‘mainfest.json‘)

}),

3.使用 webpack --config webpack.config.js 命令打包第三方库(生成以下文件)

c15c9e38c17e30058def616ada1c3979.png

4.html中引入打包好的第三方库

在这里可以使用 add-asset-html-webpack-plugin 插件将js添加到html中

四、HappyPack

node是单线程运行,所以webpack打包也是单线程。如果需要webpack同一时间处理多个任务,可以使用HappyPack。HappyPack可以将任务分给多个进程,子进程将处理结果返回给主进程。

1.安装

npm install happypack -D

2.配置

// 1.引入happypack

let HappyPack = require(‘happypack‘)

module.exports = {

entry: ... ,

output: ... ,

mode: ‘production‘,

module:{ // 模块

rules: [

{

test:/\.js$/,

use:{

// 2.修改loader配置

loader:‘happypack/loader?id=happyBabel‘

},

exclude:/node_modules/

},

...

]

},

plugins: [

// 3.plugin添加

new HappyPack({

// 和loader id对应,处理哪类文件

id: ‘happyBabel‘,

// 如何处理,配置内容和loader一致

loaders: [{

loader: ‘babel-loader‘,

query: {

presets:[

[email protected]/preset-env‘

],

plugins:[

["@babel/plugin-proposal-decorators", { "legacy": true }],

["@babel/plugin-proposal-class-properties", { "loose" : true }],

"@babel/plugin-transform-runtime"

],

}

}]

}),

...

],

}

原文:https://www.cnblogs.com/zhaojingj/p/12741344.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值