tree shaking对打包体积优化及作用

yizhihongxing

什么是Tree Shaking

Tree Shaking 是指在打包过程中,检测出未被引用的代码,并在最终打包结果中将这些未引用的代码(也被称为“未引用代码(dead code)”)移除。Tree Shaking 目的是为了精简打包后的代码和减小文件体积,提升网页加载速度。

在理解 Tree Shaking 之前需要了解几个概念:
- 模块 (Module):为了使 JavaScript 更加规范化,ES6 引入了模块化的概念。
- 导入 (Import):在一个模块中加载另一个模块中的代码。
- 导出 (Export):将一个模块中的代码暴露给其他模块使用。

实现 Tree Shaking

为了让项目能启用 Tree Shaking,需要满足以下要求。

使用ES6模块化

Tree Shaking 只能对 ES6 模块化的代码起作用,因此在项目中应该使用 ES6 模块化。

// ES6 module
import { method } from './module.js'

// CommonJS module
const { method } = require('./module.js')

如果项目中使用的是 CommonJS 或者 AMD 模块化,需要在 webpack.config.js 中打开 webpack 的相关配置以兼容 Tree Shaking,详见官方文档。

production模式打包

Tree Shaking 只会在 production 模式下起作用,开发模式下不会对应用进行代码清理。因此,需要先开启 mode = 'production'

配置Webpack

在 webpack 的配置文件中通过 optimization 开启 Tree Shaking:

module.exports = {
  optimization: {
    usedExports: true
  }
}

在使用 Webpack4.x 及以上版本时,不需要手动添加 usedExports: true 属性,Webpack已默认开启这个属性。

示例一

在源文件中引入 add 方法并应用到代码中,最终在打包的代码中,需要排除未使用的方法。

sum.js 文件:

export function add(a, b) {
  return a + b;
}
export function subtract(a, b) {
  return a - b;
}

index.js 文件:

import { add } from './sum';

console.log(add(1, 2));
console.log('test');

打包后的文件为:

console.log(add(1, 2));
console.log('test');

从打包后的代码可以看到,subtract 方法由于没有被使用,已经被去掉了。

示例二

有时候,JavaScript框架或者工具库自己的函数库和引入的其他库中,可能有相同的名字。而且还可能同样的函数名,会存在多个不同的实现。在这种情况下,需要确保 Tree Shaking 可以识别需要的库,而不会将多余的代码打包进应用中。

lodash.js 模板库:

export function camelCase(str) {
  return str.replace(/[-_]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));
}
export function kebabCase(str) {
  return camelCase(str).replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);
}

App.js 文件:

import { kebabCase } from 'lodash';

console.log(kebabCase('Some-Component'));
console.log('test');

打包后的文件为:

console.log("some-component");
console.log("test");

从打包后的代码可以看到,只有应用使用的 kebabCase 方法被打包进去。camelCase 方法由于没有被使用,已经被去掉了。

总结

Tree Shaking 可以在打包过程中自动删除掉应用中未被使用的代码,大大减少应用体积,加快应用加载速度。需要开启 ES6 模块化,webpack 需要配置,同时也需要开启 production 模式才能生效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:tree shaking对打包体积优化及作用 - Python技术站

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

相关文章

  • javascript 内置对象及常见API详细介绍

    JavaScript 内置对象及常见 API 详细介绍 什么是 JavaScript 的内置对象? Javascript 的内置对象是指在 JavaScript 运行环境中自带的对象,它们包含了我们在编写 JavaScript 代码时需要调用的各种方法和属性,用它们可以方便地完成各种任务。常见的内置对象包括:Object、Array、Function、Dat…

    JavaScript 2023年5月19日
    00
  • 使用requestAnimationFrame实现js动画性能好

    使用requestAnimationFrame实现js动画的优点是可以避免过多使用setTimeout或setInterval造成的页面卡顿、CPU过度占用等问题,从而保证动画的流畅度和性能。以下是具体操作步骤: 准备工作 首先需要在代码中声明一个全局变量 requestId 用于记录动画的请求ID。然后编写动画函数,此函数需要接收一个时间参数。 let r…

    JavaScript 2023年6月10日
    00
  • 保证JavaScript和Asp、Php等后端程序间传值编码统一

    确保JavaScript和ASP、PHP等后端程序间传值编码统一是一个非常重要的问题,因为不同的编码方式会导致传递的值变得混乱和不可预测。下面是一些标准的攻略,可以确保这些问题被避免: 1. 统一字符编码 我们建议使用UTF-8字符编码,因为它是一种通用的编码方式,能够支持所有的字符,包括中文、日文和阿拉伯文等等。此外,UTF-8也是互联网上最常用的编码方式…

    JavaScript 2023年5月20日
    00
  • Javascript Date setUTCHours() 方法

    以下是关于JavaScript Date对象的setUTCHours()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的setUTCHours()方法 JavaScript的setUTCHours()方法设置的UTC小时部分。该方法接受一个整数,表示要的UTC小时。如果该参数超出了JavaScript所能表示的范围,则自动调整为相应的…

    JavaScript 2023年5月11日
    00
  • JavaScript下一版本标准ES6的Set集合使用详解

    JavaScript下一版本标准ES6的Set集合使用详解 什么是Set集合 Set是一种新的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。Set有以下特点: Set内部使用Hash表存储元素,导致元素的顺序不是按照插入顺序保存,但是一组具有相同内容的对象在Set内只有一份。 Set添加元素时,不会进行类型转换,比如1和”1″是两个不同的值。…

    JavaScript 2023年5月28日
    00
  • JavaScript程序开发之JS代码放置的位置

    JavaScript程序开发中,JS代码的放置位置主要有内部JS和外部JS两种方式。下面将详细讲解这两种方式的使用方法及注意事项。 一、内部JS 内部JS是将JS代码直接嵌入到HTML文档中的一种方式。我们可以通过<script>标签来实现内部JS的操作。 下面是一个简单的内部JS示例: <!DOCTYPE html> <htm…

    JavaScript 2023年5月27日
    00
  • 对于js垃圾回收机制的理解

    关于 JS 垃圾回收机制的理解,可以从下面三个方面来进行说明: 什么是垃圾回收? 垃圾回收是一种自动化的过程,它主要的功能是自动找出不再被程序所使用的内存,然后释放这些内存资源。JS 中的垃圾回收,就是通过一些算法来进行自动的垃圾回收。 垃圾回收的算法 垃圾回收器通过检查数据的引用,找出不再被引用的变量,然后进行垃圾回收操作。JS 垃圾回收是基于算法原理的。…

    JavaScript 2023年6月11日
    00
  • Ajax实现简单下拉选项效果【推荐】

    下面就来讲解一下“Ajax实现简单下拉选项效果【推荐】”的实现过程。 标题 首先,我们需要确定这篇攻略的标题。可以考虑使用以下标题: Ajax实现简单下拉选项效果 确定需求 接下来,我们需要确定这篇攻略的具体需求。根据标题,我们需要实现一个下拉选项效果,包含以下需求: 网页打开时,异步请求获取下拉选项的内容并展示。 当用户选择某个选项时,通过Ajax异步请求…

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