Tree Shaking:优化前端项目的利器

news2024/9/27 21:31:00

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 摘要:
    • 引言:
    • 正文:
      • 1️⃣ Tree Shaking的概念
      • 2️⃣ Tree Shaking的工作原理
      • 3️⃣ 如何实现Tree Shaking
      • 4️⃣ Tree Shaking的应用场景
    • 总结:
    • 参考资料:

摘要:

本文将详细介绍Tree Shaking的概念、工作原理以及如何实现,帮助您了解如何利用Tree Shaking减少代码体积,提高项目性能。

引言:

🌐 在现代前端开发中,项目性能优化是一个重要的课题。Tree Shaking是一种有效的代码压缩和优化手段,它可以移除项目中未使用的代码,减少打包体积,提高加载速度。接下来,让我们一起来探索Tree Shaking的奥秘。

正文:

1️⃣ Tree Shaking的概念

Tree Shaking一种代码优化技术,它通过识别项目中未被使用的代码,并将其从打包结果中移除,从而减少代码体积,提高加载速度Tree Shaking主要应用于模块化开发中,通过静态分析来确定代码的使用情况

2️⃣ Tree Shaking的工作原理

Tree Shaking的工作原理主要包括以下几个步骤:

  • 分析:对代码进行静态分析,识别出未被使用的代码。
  • 标记:将未被使用的代码标记为可删除。
  • 打包:打包时,只包含被使用的代码,移除被标记的代码。
  • 运行时:运行时,只加载被使用的代码。

3️⃣ 如何实现Tree Shaking

实现Tree Shaking通常需要以下几个步骤:

  • 使用支持Tree Shaking的构建工具,如Webpack、Parcel等。
  • 编写模块化的代码,遵循ES6模块规范,确保模块的独立性。
  • 确保模块的标识符(如import语句中的路径)是稳定的,以便构建工具正确识别模块。
  • 使用合适的代码分割策略,如动态import(),按需加载模块。

在 Webpack 中,Tree Shaking 通常是通过 sideEffects 属性来实现的。下面是一些实现 Tree Shaking 的步骤:

  1. package.json 中添加 sideEffects 属性:

    {
      "sideEffects": {
        "*.css": false,
        "*.png": false
      }
    }
    

    在这个例子中,我们告诉 Webpack,*.css*.png 文件没有副作用,可以被移除。

  2. 使用 @babel/plugin-transform-runtime@babel/plugin-proposal-class-properties 插件:

    这些 Babel 插件可以帮助 Tree Shaking 更好地工作。@babel/plugin-transform-runtime 插件会自动将一些全局方法转换为模块方法,从而避免全局污染。@babel/plugin-proposal-class-properties 插件会支持类属性的提案,从而使 Tree Shaking 更好地处理类属性。

    安装这些插件:

    npm install --save-dev @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties
    

    并在 .babelrcbabel.config.js 文件中配置它们:

    {
      "plugins": ["@babel/plugin-transform-runtime", "@babel/plugin-proposal-class-properties"]
    }
    
  3. 使用 optimization.sideEffects 配置 Webpack:

    在 Webpack 配置文件中,添加 optimization.sideEffects 属性,并将其设置为 true。这将启用 Tree Shaking 优化。

    module.exports = {
      // ...
      optimization: {
        sideEffects: true
      }
    };
    

通过以上步骤,Webpack 将会启用 Tree Shaking 优化,并尝试移除未使用的代码。需要注意的是,Tree Shaking 可能会导致一些问题,例如模块被意外地移除,或者模块的依赖关系没有被正确地解析等。因此,在使用 Tree Shaking 时,需要确保代码的质量,避免引入不必要的副作用。

4️⃣ Tree Shaking的应用场景

Tree Shaking适用于以下场景:

  • 减少打包体积:通过移除未使用的代码,减少打包体积,提高加载速度。
  • 优化生产环境:在生产环境中,利用Tree Shaking可以提高性能,减少资源消耗。
  • 支持懒加载:通过Tree Shaking,可以实现按需加载模块,减少初始加载时间。

总结:

🎉 Tree Shaking是一种有效的代码优化技术,通过移除项目中未使用的代码,减少打包体积,提高加载速度。通过了解Tree Shaking的概念、工作原理以及如何实现,我们可以更好地利用Tree Shaking优化前端项目,提升用户体验。

参考资料:

  • Tree Shaking 百度百科
  • MDN Web Docs - Tree Shaking
  • Webpack官方文档 - Tree Shaking

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1507051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1、功能安全入门之内功心法ISO26262介绍

目录 0. 对于安全规范的认知 0.1 ISO26262简介 0.2 功能安全的必要性 2. ISO26262第1部分基本术语 2. ISO26262第2部分-功能安全管理 3. ISO26262第3部分-概念阶段 4. ISO26262第4部分-产品开发:系统层面 5. ISO26262第5部分-产品开发:硬件层面 6. ISO26262第6部分-…

使用VBA快速梳理多层级族谱(组织架构)

实例需求:族谱(或者公司组织架构等)都是典型的带有层级关系数据,例如下图中左侧表格所示。 A列为层级(准确的讲是B列成员的层级),从一开始递增B列和C列为成员直接的父(/母&#xff…

搭建一款实用的个人IT工具箱——it-tools

一、it-tools介绍 IT-Tools是一款开源的个人工具箱,专为IT从业人员打造,支持Docker私有化部署,包含众多实用的IT工具。其功能丰富多样,涵盖二维码生成、数据格式转换、MAC地址生成等,可满足用户多样化的需求。 二、本…

armv8/armv9 MMU深度学习

目录 1、MMU概念介绍2、虚拟地址空间和物理地址空间2.1、(虚拟/物理)地址空间的范围2.2、物理地址空间有效位(范围)2.2.1、页表翻译相关寄存器的配置 3、Translation regimes4、地址翻译/几级页表?4.1、思考:页表到底有几级?4.2、以4KB granu…

《日期类》的模拟实现

目录 前言: 头文件类与函数的定义Date.h 实现函数的Date.cpp 测试Test.cpp 运行结果: 前言: 我们在前面的两章初步学习认识了《类与对象》的概念,接下来我们将实现一个日期类,是我们的知识储备更加牢固。 头文件…

Android Gradle 开发与应用 (五) : 基于Gradle 8.2,创建Gradle插件

1. 前言 本文介绍在Android中,如何基于Gradle 8.2,创建Gradle插件。 1.1 本文环境 Android Studio 版本 : Android Studio Hedgehog | 2023.1.1Gralde版本 : gradle 8.2 使用 Android Gradle 插件升级助理 Android Gradle 插件版本说明 1.2 为什么要写…

【C语言】——详解操作符(下)

【C语言】——详解操作符(下) 前言七、关系操作符八、逻辑操作符8.1、& 与运算符8.2、 | 或运算符 九、条件操作符十、逗号表达式十一、下标引用与函数调用操作符11.1、[ ] 下标引用操作符11.2、( ) 函数调用操作符 十二、 结构成员操作符12.1、…

转移表回调函数实现

回调函数实现 计算器的模拟(函数指针数组的使用)(回调函数) 简化 冗余 老的代码的问题就是 冗余 写死 不能完成不同的任务 函数调用的时候只需要知道地址就可以 calc计算器 这里也称之为转移表 #define _CRT_SECURE_NO_WAR…

朴素贝叶斯 | 多分类问题

目录 一. 贝叶斯公式的推导二. 朴素贝叶斯1. 离散的朴素贝叶斯朴素贝叶斯导入示例 离散的朴素贝叶斯训练 2. 连续的朴素贝叶斯3. 伯努利朴素贝叶斯4. 多项式朴素贝叶斯4.1 Laplace平滑4.2 Lidstone平滑 三. 概率图模型1. 贝叶斯网络(Bayesian Network)1.1 全连接贝叶斯网络1.2 …

【Redis系列】深入了解 Redis:一种高性能的内存数据库

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

分布式搜索elasticsearch

1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案…

25 使用块的网络 VGG【李沐动手学深度学习v2课程笔记】

目录 1. VGG块 2. VGG网络 3. 训练模型 4. 小结 虽然AlexNet证明深层神经网络卓有成效,但它没有提供一个通用的模板来指导后续的研究人员设计新的网络。 与芯片设计中工程师从放置晶体管到逻辑元件再到逻辑块的过程类似,神经网络架构的设计也逐渐变得…

【Linux】文件系统扩展——软硬链接

目录 对文件建立软硬链接 软链接 硬链接 对文件建立软硬链接 对 log 文件建立软链接: ln -s log log.soft.link 对 test 文件建立硬链接: ln test test.hard.link log.soft.link 和 test.hard.link 在 Linux 中都只是文件名,为了方便…

Math类 --Java学习笔记

Math 代表数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法 Math提供的常用方法

springBoot--静态资源映射

静态资源映射 前言1、通过继承 WebMvcConfigurerAdapter 来实现2、在 application.properties 配置 前言 在 web 开发中,静态资源的访问是必不可少的,如图片、js、css等资源的访问 1、通过继承 WebMvcConfigurerAdapter 来实现 即如果使用了 EnableWe…

web前端框架

目前比较火热的几门框架: React React是由Facebook(脸书)开发和创建的开源框架。React 用于开发丰富的用户界面,特别是当您需要构建单页应用程序时。它是最强大的前端框架。 弊端: 您不具备 JavaScript 的实践知识,则建议不要使用 React。同样&#x…

后端八股笔记------框架篇

👆是单例,不是线程安全 上上图中的count变量在单例bean中就是不安全的。 有fetchType"lazy"的情况就是懒加载,不调用就不加载。 没有"lazy"的情况就不是懒加载。

小迪安全36WEB 攻防-通用漏洞XSS 跨站MXSSUXSSFlashXSSPDFXSS

#XSS跨站系列内容:1. XSS跨站-原理&分类&手法 XSS跨站-探针&利用&审计XSS跨站另类攻击手法利用 XSS跨站-防御修复&绕过策略 #知识点: 1、XSS 跨站-原理&攻击&分类等 2、XSS 跨站-MXSS&UXSS&FlashXss&PDFXSS 等 1、原…

【数据结构与算法】绪论

目录 一、数据结构研究 二、基本概念和术语 2.1 基本概念 2.2 什么是数据结构? 2.3 数据结构内容 2.4 逻辑结构种类 2.5 存储结构种类 2.6 数据类型和抽象数据类型 三、算法和算法分析 3.1 算法的定义 3.2 算法的特性 3.3 算法设计要求 3.4 算法好坏评…

mediapipe 实现姿态分析——举手检测

目录 人体姿态检测 效果展示 举手检测 行业应用 代码实现 代码分析 效果展示 代码修改,一只手举起即可 总结 啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦^_^啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦♪(^∇^*)啦啦啦…