JS 加载性能Tree Shaking优化详解

yizhihongxing

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优化详解 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 用JObj实现的渐变效果

    下面我来详细讲解一下“用JObj实现的渐变效果”的完整攻略。 什么是JObj JObj是JavaFX中提供的一个渐变类,可以让开发者方便地实现渐变效果。它是一个抽象类,有两个具体的实现类:LinearGradient 和 RadialGradient。 JObj中的五个属性 任何一个 JObj 都具备五个属性: CycleMethod(循环方式) Stop(…

    JavaScript 2023年6月10日
    00
  • 实例详解JavaScript中setTimeout函数的执行顺序

    接下来我将详细讲解“实例详解JavaScript中setTimeout函数的执行顺序”的完整攻略。 一、背景介绍 在JavaScript中,setTimeout函数是一种异步操作,可以实现延迟执行某个函数或代码块的功能。在使用setTimeout时,我们需要了解其执行顺序和一些注意事项,才能保证程序的正确性。 二、setTimeout函数的基本用法 setT…

    JavaScript 2023年5月28日
    00
  • 微信小程序+腾讯地图开发实现路径规划绘制

    下面我将详细讲解“微信小程序+腾讯地图开发实现路径规划绘制”的完整攻略。 前提准备 在开始之前,需要完成以下几个步骤: 申请腾讯地图开发者账号,并获取开发者密钥 创建微信小程序项目,并在项目中引入腾讯地图SDK 实现步骤 1. 获取用户位置 在前往目的地前,需要获取用户的当前位置。可以通过微信小程序的 wx.getLocation 接口获取用户当前的经纬度信…

    JavaScript 2023年6月11日
    00
  • js、jquery图片动画、动态切换示例代码

    下面是关于 “js、jquery图片动画、动态切换示例代码” 的详细攻略。 1. 简介 首先,图片动画是网页设计中非常重要的一部分,能够为网页提供更加生动、具有吸引力的效果。而 JavaScript 和 jQuery 是实现图片动画的最好选择。 2. 实现图片动画的具体代码 下面我们以两个示例代码的形式,帮助你快速学习如何使用 JavaScript 和 jQ…

    JavaScript 2023年6月10日
    00
  • js中script的上下放置区别,Dom的增删改创建操作实例分析

    JavaScript中,标签可以放在HTML文档中的和标签中。但不同的放置区域会对脚本的使用产生影响。 script的上下放置区别 放在标签中 当脚本代码放在标签中时,它的作用域是全局的,也就是说,它可以在HTML文档中的任何部分被访问到,包括标签中和标签中。 <!DOCTYPE html> <html> <head> &…

    JavaScript 2023年6月10日
    00
  • 浅谈JavaScript对象的创建方式

    JavaScript 是一种面向对象的编程语言,对象是它的核心。在 JavaScript 中,对象可以通过不同的方式进行创建。下面将详细讲解 JavaScript 对象的创建方式。 字面量创建对象 JavaScript 对象可以通过字面量的方式创建。字面量创建的对象很简单,只需要 {} 这个大括号。在这个大括号中填写数据,即可创建一个对象,它的属性和值由大括…

    JavaScript 2023年5月18日
    00
  • 使用开源Cesium+Vue实现倾斜摄影三维展示功能

    下面是使用开源Cesium+Vue实现倾斜摄影三维展示功能的完整攻略。 1. 开源Cesium+Vue简介 1.1 Cesium Cesium 是一个可视化地球数据的 JavaScript 库,拥挤者来自美国宾夕法尼亚州的开源项目。 Cesium支持多样化地球数据的可视化,包括卫星、建筑、城市、气象等等,特别是对于三维地球数据的处理。 1.2 Vue Vue…

    JavaScript 2023年6月11日
    00
  • 正则表达式regular expression详述(一)

    正则表达式regular expression详述 什么是正则表达式? 正则表达式(Regular Expression),简称为正则(Regex或RegExp),是一种用于描述文本匹配规则的工具。它使用单个字符串来描述、匹配和替换一系列符合某个规则的字符串。 使用正则表达式可以极大地方便文本处理,例如数据的清洗、格式检验、搜索、替换、语法分析等。正则表达式…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部