我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Tree-Shaking 机制快速掌握

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Tree-Shaking 机制快速掌握

写在前面

最近在读霍老师的《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 机制的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Tree-Shaking 机制快速掌握

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

下载Word文档

猜你喜欢

Tree-Shaking 机制快速掌握

这篇文章主要为大家介绍了Tree-Shaking 机制的快速掌握教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-16

ASP缓存对象入门指南:快速掌握缓存机制

,提升网站性能 ASP缓存、缓存机制、性能优化、网站速度、数据访问 ASP缓存对象是ASP.NET中用于存储数据的对象,它可以帮助我们提高网站的性能。ASP缓存对象是一个键值对存储,我们可以将需要缓存的数据存储在缓存对象中,然后在需要的时候直接从缓存对象中获取数据。这样就可以避免每次都需要从数据库中查询数据,从而提高网站的性能。
ASP缓存对象入门指南:快速掌握缓存机制
2024-02-23

【快速掌握RabbitMQ到实战】

1.什么是消息队列 ● 消息队列(Message Queue)是一种用于在应用程序之间传递消息的通信方式,消息队列允许应用程序异步地发送和接收消息,并且不需要直接连接到对方。 ● 消息(Message)是指在应用间传送的数据。消息可以非常简
2023-08-23

快速掌握PyCharm的运行快捷键

PyCharm是一款功能强大的Python集成开发环境,通过灵活的快捷键可以提高开发效率。本文将向您介绍PyCharm中常用的运行快捷键,并提供具体的代码示例,帮助您快速入门PyCharm的使用。首先,我们需要了解PyCharm中最基本的
快速掌握PyCharm的运行快捷键
2024-02-26

快速掌握VueRouter使用方法

VueRouter是Vue.js官方的路由管理器。它和Vue.js的核心深度集成,让构建单页面应用变得易如反掌。路由实际上就是可以理解为指向,就是我在页面上点击一个按钮需要跳转到对应的页面,这就是路由跳转
2023-01-09

如何快速掌握Python协程

这篇文章主要讲解了“如何快速掌握Python协程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Python协程”吧! 1. 协程相关的概念1.1 进程和线程进程(Process)
2023-06-15

快速掌握java排序算法-快速排序(图文)

概念快速排序属于交换排序,主要步骤是使用基准元素进行比较,把小于基准元素的移动到一边,大于基准元素的移动到另一边。从而把数组分成两部分,然后再从这两部分中选取出基准元素,重复上面的步骤。过程如下:(推荐视频:java视频教程) 紫色:基准元素绿色:大于基准元
快速掌握java排序算法-快速排序(图文)
2017-05-20

快速掌握CSS框架的方法

简明易懂:CSS框架如何快速上手,需要具体代码示例简介:CSS框架是前端开发中常用的工具,它可以帮助我们快速构建美观且响应式的网页。然而,对于初学者来说,学习并使用CSS框架可能会有一定的困难。本篇文章将简要介绍CSS框架的基本概念,并提
快速掌握CSS框架的方法
2024-01-16

快速掌握Node.js事件驱动模型

一、传统线程网络模型 在了解Node.js事件驱动模型之前,我们先了解一下传统的线程网络模型,请求进入web服务器(IIS、Apache)之后,会在线程池中分配一个线程来线性同步完成请求处理,直到请求处理完成并发出响应,结束之后线程池回收。
2022-06-04

快速掌握用python写并行程序

目录 一、大数据时代的现状 二、面对挑战的方法 2.1 并行计算 2.2 改用GPU处理计算密集型程序 3.3 分布式计算
2023-01-30

快速掌握Fedora 17的方法详解

要快速掌握Fedora 17,可以按照以下步骤进行:1. 下载和安装Fedora 17:首先,您需要从官方网站上下载Fedora 17的安装镜像文件。然后,将该镜像烧录到一张空白光盘或创建一个可引导的USB驱动器。最后,将该光盘或USB驱动
2023-09-23

dedecms首页修改实例解析,快速掌握定制技巧

在网站建设过程中,对首页进行定制是非常重要的一步。而对于采用dedecms系统的网站来说,对首页的定制也是一个常见的需求。本文将通过实例解析,介绍如何在dedecms系统中进行首页的修改,帮助您快速掌握定制技巧。首先,我们需要了解dede
dedecms首页修改实例解析,快速掌握定制技巧
2024-03-14

编程热搜

目录