JS 加载性能Tree Shaking优化详解

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日

相关文章

  • 详解JavaScript中jQuery和Ajax以及JSONP的联合使用

    详解JavaScript中jQuery和Ajax以及JSONP的联合使用 概述 在现代前端开发中,通过AJAX技术可以实现无需整页刷新的异步加载数据,从而提升用户体验。而jQuery作为目前最流行的JavaScript库,为我们提供了非常便捷的Ajax操作API。除此之外,由于浏览器的同源策略,我们需要借助JSONP跨域获取到其他域名下的数据,在此过程中jQ…

    JavaScript 2023年6月11日
    00
  • Javascript如何判断数据类型和数组类型

    Javascript中的数据类型包括Boolean、Number、String、Null、Undefined、Object、Symbol,其中Object中又包含了Array和Function等类型。我们可以通过typeof关键字来判断基本数据类型,而判断数组类型则需要稍微复杂一些。 判断基本数据类型 typeof关键字可以判断一个变量的基本数据类型,其用法…

    JavaScript 2023年5月27日
    00
  • JavaScript利用切片实现大文件断点续传

    下面我将为你详细讲解“JavaScript利用切片实现大文件断点续传”的完整攻略。 什么是大文件断点续传? 大文件断点续传是指在上传或下载大文件时,当中途发生网络异常或操作中断等情况,可以暂停传输并记录已传输的数据,下次继续传输时从中断处开始传输,避免重新传输整个文件。 实现大文件断点续传的原理 大文件断点续传的实现原理是将大文件切分成若干个小部分即“分片”…

    JavaScript 2023年5月27日
    00
  • JavaScript 事件流、事件处理程序及事件对象总结

    下面给出关于 JavaScript 事件流、事件处理程序及事件对象总结的详细攻略。 1. 事件流 事件流描述的是从页面中接收事件的顺序,分为三个阶段: 捕获阶段:事件从最外层的容器开始向下传递到目标元素。 目标阶段:事件到达目标元素。 冒泡阶段:事件从目标元素开始向上冒泡到最外层的容器。 在标准 W3C 的事件模型中,事件传递的顺序是从上往下的(捕获阶段)、…

    JavaScript 2023年5月27日
    00
  • 使用JavaScript在html文档内添加新的元素节点

    使用JavaScript可以在html文档内添加新的元素节点,具体的步骤如下: 选中你想要添加元素的父节点 const parent = document.querySelector(‘#parent-id’); 这里假设你已经通过HTML的id属性找到了父节点,如果你不清楚可以查看querySelector的文档。 创建新节点 const newNode …

    JavaScript 2023年6月10日
    00
  • JS前端操作 Cookie源码示例解析

    当我们需要在前端操作Cookie时,我们可以通过JavaScript来实现。以下是针对Cookie相关操作的完整攻略: 什么是Cookie? Cookie是在浏览器上存储的一些文本数据,这些数据通常是与网站相关联的,如用户ID、购物车数据等。通过设置Cookie,可以更好地跟踪和管理用户的首选项、购物车数据、登录信息等。 前端如何操作Cookie? 前端操作…

    JavaScript 2023年6月11日
    00
  • JS实现深拷贝的几种方法介绍

    JS实现深拷贝的几种方法介绍 在 JavaScript 编程过程中,我们经常需要用到对象的复制。有时候,我们需要的是深度拷贝,即在内存中完全克隆一个对象,使得被克隆对象之后的操作互不干扰。JS实现深拷贝的几种方法主要包括: 使用 JSON.parse 和 JSON.stringify 方法进行深拷贝 使用递归方法进行深拷贝 使用第三方库进行深拷贝 下面将对以…

    JavaScript 2023年5月27日
    00
  • 一文教会你提高Javascript代码效率的技巧

    一文教会你提高JavaScript代码效率的技巧 介绍 本篇文章将会介绍一些提高JavaScript代码效率的技巧。如果您已经熟悉了JavaScript基础语法并开发过一些JavaScript应用,那么了解更多关于如何提高代码效率的方法应该是您进一步提升技能的重要步骤。 技巧一:避免不必要的循环 如果你在应用程序中使用循环语句,那么要尽可能避免在不必要的场景…

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