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优化详解
- 浅谈CSS中浮动float带来的高度塌陷问题及4种解决方案 2023-12-13
- 动态调用CSS文件的JS代码 2023-12-23
- javascript中关于执行环境的杂谈 2023-12-01
- css3 实现元素弧线运动的示例代码 2024-01-03
- 通过构造AJAX参数实现表单元素JSON相互转换 2022-12-28
- JS中的BOM应用 2023-12-02
- php – 将html内容插入mysql表 2023-10-26
- 解决页面整体使用transform scale后高德地图点位点击偏移错位问题 2024-01-05
- js取消单选按钮选中示例代码 2023-12-01
- JavaScript最少知识原则介绍与体现 2022-10-22