iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Tree-Shaking 机制快速掌握
  • 299
分享到

Tree-Shaking 机制快速掌握

Tree-Shaking 机制Tree Shaking 2023-02-16 09:02:35 299人浏览 安东尼
摘要

目录写在前面直奔主题最后写在前面 最近在读霍老师的《vue.js设计与实现》,感觉收获很多,由于霍老师是官方Vue维护成员,会从很通俗易懂的角度去讲Vue的实现细节。而不是按照源码

写在前面

最近在读霍老师的《vue.js设计与实现》,感觉收获很多,由于霍老师是官方Vue维护成员,会从很通俗易懂的角度去讲Vue的实现细节。而不是按照源码死讲解,很不错,推荐给大伙!

直奔主题

Tree-Shaking 的本质其实就是消除无用代码也就是dead code,减小打包后文件,不太清楚dead code概念的不用担心,下面会讲到。Tree-Shaking是打包构建工具常用的优化手段。在我们日常的开发最常使用的,可能就是ESM的使用,会触发默认的Tree-Shaking机制并对无效代码进行处理。

//utils.js
const str = "Hello Word";
export function fun1(){
    console.log(str);
}
export function fun2(){
    console.log(str);
}
//index.js
import { fun2 } from 'utils.js'

这里的fun1并不会被打包到最后生成 build 文件,证明fun1满足了dead code的条件,从而触发了Tree-Shaking机制。

dead code 条件

1.代码不会被执行,不可到达

2.代码执行的结果不会被用到

3.代码只会影响死变量(只写不读)

这里有一个例外 就是js由于是动态类型的语言 很难从纯编译下解析到当前是否是dead code 如:

//utils.js
function fun1(){
    console.log(str);
}
fun1.prototype.run = function(){
    console.log("run");
}
Array.prototype.stop = function(){
    console.log("stop");
}
export const fun1;

虽然没有被调用,但是在打包后生成的build 文件中依旧会包含这段代码,是因为无法静态解析这段代码是否真正无用,如果删除掉了utils.js 会导致Array原型上方法也失效。所以,这就引出了另一个很重要的概念就是,副作用,如果一个 函数调用会产生副作用,那么就不能将其移除。什么是副作用?简单 地说,副作用就是,当调用函数的时候会对外部产生影响

当我们遇到打包工具无法静态解析的代码,可以通过打包工具的另一个机制去做手动告知

import {fun1} from './utils'
 fun1()

这里的 就是告知打包工具 这段代码的调用不会产生副作用,你随便删,设置过完后再次重新打包就会发现,Array 原型上声明stop 就不包含在内了!

知道了这些,那我们日常应该如何利用Tree-Shaking机制呢?

如在我们的代码中,封装根据开发环境,设置动态api不同调试log。可以通过打包工具的预构建常量,配合判断,如果环境不是测试环境,会被检测为dead code从而移出构建最终的构建文件中。实现优化打包体积,并且不会影响我们开发的环境。

//webpack.config.js
new WEBpack.DefinePlugin({
 __DEV_OPTIONS_: JSON.stringify(true)
})
//index.js
if(__DEV_OPTIONS_){
    //初始化开发环境下的相关配置
    initLog();
    setApi();
}

最后

以上就是本篇文章的全部内容了!学习思路来自《Vue.js设计与实现》分享给大家!

更多关于Tree-Shaking 机制的资料请关注编程网其它相关文章!

--结束END--

本文标题: Tree-Shaking 机制快速掌握

本文链接: https://www.lsjlt.com/news/196314.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Tree-Shaking 机制快速掌握
    目录写在前面直奔主题最后写在前面 最近在读霍老师的《Vue.js设计与实现》,感觉收获很多,由于霍老师是官方Vue维护成员,会从很通俗易懂的角度去讲Vue的实现细节。而不是按照源码...
    99+
    2023-02-16
    Tree-Shaking 机制 Tree Shaking
  • ASP缓存对象入门指南:快速掌握缓存机制
    Cache myCache = new Cache(); 创建缓存对象后,我们可以使用 Add 方法将数据存储在缓存对象中,示例代码如下: myCache.Add("myData", "Hello World!", null, DateT...
    99+
    2024-02-23
    要使用ASP缓存对象 我们需要先创建一个缓存对象。我们可以通过 ASP.NET Cache 类来创建缓存对象 示例代码如下:
  • 【快速掌握RabbitMQ到实战】
    1.什么是消息队列 ● 消息队列(Message Queue)是一种用于在应用程序之间传递消息的通信方式,消息队列允许应用程序异步地发送和接收消息,并且不需要直接连接到对方。 ● 消息(Message)是指在应用间传送的数据。消息可以非常简...
    99+
    2023-08-23
    java-rabbitmq rabbitmq java 分布式 中间件
  • 如何快速掌握Github Actions
    这篇文章主要介绍“如何快速掌握Github Actions”,在日常操作中,相信很多人在如何快速掌握Github Actions问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • 如何快速掌握Fink SQL
    这篇文章主要讲解了“如何快速掌握Fink SQL”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Fink SQL”吧!1、导入所需要的的依赖包&l...
    99+
    2024-04-02
  • 快速掌握PyCharm的运行快捷键
    PyCharm是一款功能强大的Python集成开发环境,通过灵活的快捷键可以提高开发效率。本文将向您介绍PyCharm中常用的运行快捷键,并提供具体的代码示例,帮助您快速入门PyCha...
    99+
    2024-02-26
    运行 pycharm 快捷键 python程序
  • 快速掌握VueRouter使用方法
    目录一、编程式路由导航二、缓存路由组件三、两个新的声明周期钩子四、路由守卫五、路由器的两种工作模式本篇博客会介绍Vue中的VueRouter的基本使用,编程式路由导航增加了我们进行路...
    99+
    2023-01-09
    Vue Router用法 Vue Router原理
  • 一文快速掌握Spring Cloud Stream
    目录一、概述简介1.1. cloud Stream是什么1.2. 设计思想1.4. 注解二、基于注解代码练习2.1. 消息驱动之生产者2.3. 目前存在的问题2.4. 分组解决重复消...
    99+
    2024-04-02
  • 如何快速掌握Python协程
    这篇文章主要讲解了“如何快速掌握Python协程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Python协程”吧! 1. 协程相关的概念1.1 进程和线程进程(Pro...
    99+
    2023-06-15
  • Java快速掌握Vector类方法
    目录Vector的基本介绍Vector类支持4种构造方法一些常用的方法1.add方法2.remove方法3.set方法4.size、capacity、get方法代码Vector的基本...
    99+
    2024-04-02
  • 快速掌握CSS框架的方法
    简明易懂:CSS框架如何快速上手,需要具体代码示例 简介:CSS框架是前端开发中常用的工具,它可以帮助我们快速构建美观且响应式的网页。然而,对于初学者来说,学习并使用CSS框架可能会有一定的困难。本篇文章将简要介绍CSS框架的基...
    99+
    2024-01-16
    快速上手 CSS框架
  • 怎么快速掌握Redis数据库
    本篇内容主要讲解“怎么快速掌握Redis数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么快速掌握Redis数据库”吧!Redis基本数据类型 ...
    99+
    2024-04-02
  • Pythonsubprocess库六个实例快速掌握
    目录subprocess例1-快速使用subprocess例2-subprocess.run()的返回值例3-全面的返回值介绍例4-代码有bug的情况例5-捕获stdout和stde...
    99+
    2024-04-02
  • JS快速掌握ES6的class用法
    1.如何构造? 先复习一下es5常用的构建类的方法:首先es5的写法使用原型进行对象的方法的,为什么不在构造函数里添加方法呢?因为实例化对象的时候,会重复的建立好多相同的方法,浪费资...
    99+
    2024-04-02
  • 如何快速掌握Adam优化算法
    这篇文章主要讲解了“如何快速掌握Adam优化算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Adam优化算法”吧!本教程分为三个部分:他们是: 梯度下降 A...
    99+
    2023-06-15
  • 怎么快速掌握scrapy爬虫框架
    这篇文章主要介绍“怎么快速掌握scrapy爬虫框架”,在日常操作中,相信很多人在怎么快速掌握scrapy爬虫框架问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么快速掌握scrapy爬虫框架”的疑惑有所帮助!...
    99+
    2023-06-15
  • 快速掌握Fedora 17的方法详解
    要快速掌握Fedora 17,可以按照以下步骤进行:1. 下载和安装Fedora 17:首先,您需要从官方网站上下载Fedora 1...
    99+
    2023-09-23
    Fedora
  • 怎么快速掌握数据库原理
    这篇文章主要介绍“怎么快速掌握数据库原理”,在日常操作中,相信很多人在怎么快速掌握数据库原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么快速掌握数据库原理”的疑惑有所帮...
    99+
    2024-04-02
  • 快速掌握用python写并行程序
    目录 一、大数据时代的现状 二、面对挑战的方法 2.1 并行计算 2.2 改用GPU处理计算密集型程序 ...
    99+
    2023-01-30
    快速 程序 python
  • C语言快速掌握位段使用
    目录一、位段是什么二、位段的内存分配2.1位段内存分配的原则2.2位段内存分配图解三、位段的跨平台问题四、位段的使用总结一、位段是什么 位段的声明和结构是类似的,有两个不同 1.位段...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作