Tree shaking是一个术语,用于描述移除 JavaScript 上下文中的未引用代码(dead-code)。它依赖于ES2015模块系统中的静态结构特性,例如import和export。这个术语和概念实际上是由 ES2015 模块打包工具rollup启发而来,它是一个目前广泛使用的项 目构建工具。
JS 加载性能Tree Shaking优化详解
什么是Tree Shaking
Tree shaking是一个术语,用于描述移除 JavaScript 上下文中的未引用代码(dead-code)。它依赖于ES2015模块系统中的静态结构特性,例如import和export。这个术语和概念实际上是由 ES2015 模块打包工具rollup启发而来,它是一个目前广泛使用的项 目构建工具。
Tree Shaking优化方法
方法一: Webpack 配置方式
- 安装 webpack 和相关 loader
npm install webpack webpack-cli webpack-dev-server babel-loader @babel/core @babel/preset-env --save-dev
- 在webpack配置文件中增加如下内容
module.exports = {
mode: "production", //在mode中加入这个字段
entry: "./entry.js",
output: {
filename: "bundle.js",
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"],
plugins: [],
},
},
},
],
},
};
- 配置Babel
安装@babel/plugin-transform-runtime
,这是一个高级的Babel插件,它会自动添加所需的 polyfill,并且不会向全局引入任何内容。
npm install --save-dev @babel/plugin-transform-runtime
npm install --save @babel/runtime
方法二: Rollup 配置方式
- 安装相关依赖
npm install -D rollup rollup-plugin-babel
- 在 .babelrc 配置文件中写入如下内容
{
"presets": [
["@babel/preset-env"]
],
"plugins": [
["@babel/plugin-transform-runtime"]
]
}
- 在执行命令
npx rollup -c rollup.config.js
- 在rollup.config.js文件中写入如下内容
import babel from '@rollup/plugin-babel'; //rollup的babel插件
export default {
input: ['index.js', 'utility.js'],//把需要打包的文件的相对路径或绝对路径填写在这个数组中
output: { //输出目录
dir: 'dist',
format: 'umd', //输出的文件格式,支持amd, cjs, esm, iife, umd五种格式
sourcemap: true,
},
plugins: [
babel({
babelHelpers: 'runtime',
exclude: 'node_modules/**',
plugins: [["@babel/plugin-transform-runtime"]],
}),
//其他插件
]
};
示例
- 示例一
一个原始的JavaScript模块,会导入几个其他模块并抛出一个默认函数:
import a from 'module-a';
import b from 'module-b';
export default function() {
console.log( a(), b() );
}
可以使用 Tree Shaking 移除所有未使用变量,将转化为如下形式:
import a from 'module-a';
export default function() {
console.log( a() );
}
- 示例二
一个样例, 过滤出现次数大于1的列表项,这里使用的ES6语法。
const nums = [1, 2, 3, 2, 4, 4, 5, 3];
const uniqueNums = [...new Set(nums)];
console.log(uniqueNums); //[1, 2, 3, 4, 5]
我们使用Tree Shaking来优化上面的代码:
const nums = [1, 2, 3, 2, 4, 4, 5, 3];
const uniqueNums = Array.from(new Set(nums));
console.log(uniqueNums); //[1, 2, 3, 4, 5]
结论
通过使用Tree Shaking优化代码,我们可以极大地减小代码体积和加速页面加载速度,提高用户体验。无论是Webpack还是Rollup都能实现这种优化方式。
本文标题为:JS 加载性能Tree Shaking优化详解
基础教程推荐
- Vue实现电梯样式锚点导航效果流程详解 2023-07-10
- TypeScript接口介绍 2023-08-08
- 学习DIV+CSS网页布局之混合布局 2024-01-21
- React index.html引入script时 src中的斜杠都变成了空格,并且还多出了script标签 导致无法加载 2023-10-29
- js判断一个对象是否在一个对象数组中(场景分析) 2022-10-21
- CSS图片翻转菜单 2022-10-16
- 在vue-cli使用scss 2023-10-08
- JavaScript原始值与包装对象的详细介绍 2024-02-06
- web中自定义鼠标样式将其显示为左右箭头 2023-12-21
- 配置Chrome支持本地(file协议)的AJAX请求 2023-02-14