笔记:《Vue.js设计与实现》第二章阅读笔记

news/2024/10/18 18:25:48/

title: 笔记:《Vue.js设计与实现》第二章阅读笔记
date: 2023-05-20 00:19:36
categories: 《Vue.js设计与实现》
tags: 笔记

Tree-Shaking

在前端的发展历史中,Tree-Shaking 是由 Rollup.js 普及的,Tree-Shaking 的作用是去除运行时未使用或永远不会执行的代码以减少最终构建产物的体积。

Tree-Shaking 依赖于 ESModule 的静态结构,它的工作流程逻辑概括:未使用的代码不会加入到构建产物中,例如变量、函数。这些未使用的代码有一个名字 dead code,指未使用或者已使用但由于上层条件导致永远不会运行的代码。

除了 dead code,有一些代码执行了,但对外部没有任何影响也可以进行 Tree-Shaking,比如

function foo(obj) {obj && obj.foo;
}// main.ts
foo();

在这种情况下,由于 JavaScript 是一门动态语言,分析一个函数是否有副作用很有难度,比如 obj.foo,看似没有函数执行,但是如果 obj.foo 属性通过 Object.defineProperty 加入了 get 操作捕获或通过 Proxy 代理,就可能在这个捕获操作中发生了副作用,所以 foo 函数会加入到构建产物。

所以 Rollup.js 等打包工具提供了一个方式,使用 /*#__PURE__*/ 明确这个函数是一个不会发生任何副作用的纯函数。

tips: 在开发的过程中,如果能以纯函数的形式实现,则以纯函数的形式实现。

一般说来,/*#__PURE__*/ 只用在顶级调用中,可以看到如下代码

// foo.ts
export default function foo(obj) {obj && obj.foo;
}// main.ts
import foo from "foo.ts";foo(); // 顶级调用function bar() {foo(); // 函数内调用
}

顶级调用是可能发生副作用的,因为执行了 foo 函数。函数内调用也是可能发生副作用的,但是发生的前提是上层条件允许或父函数执行了,否则由于 dead code 的存在,这些代码都会被移除。

所以只需要控制顶级调用,就能控制大部分无副作用的函数。

构建不同产物

  • IIFE
  • esm
    • 直接在浏览器中运行 esm-browser
    • 在打包工具中构建 esm-bundler
  • cjs

http://www.ppmy.cn/news/71887.html

相关文章

手机五大系统

1. APSS Applications Processor Subsystem,即应用处理器子系统 (主CPU处理器),ARM的A系列内核,现在一般是8核,负责应用处理。 2. RPM Resource Power Manager,即电源管理器,ARM的M系列内核&#xff…

IS215UCVEM08B US2000型处理器板

IS215UCVEM08B US2000型处理器板通用电气标志VI卡 这IS215UCVEM08B是一种印刷电路板,是通用电气公司制造的Mark VI Speedtronic涡轮系列的一部分。这IS215UCVEM08B有一个小的圆形锂电池。这IS215UCVEM08B有几个链接点。电路板右手边有三个娇小的小鹿点。电路板背面…

js 多个小程序之间互相跳转,a小程序带参跳转到b小程序中

小程序中实现两个或者多个小程序之间互相跳转,a小程序带参跳转到b小程序中。 官方入口:wx.navigateToMiniProgram(Object object) https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateToMiniProgram.html 实现步骤: …

自助式数据分析工具:jvs-sdw数据智仓-数据服务配置

配置化数据服务 数据服务是将JVS-SDW内部加工分析生成的数据集通过API的方式 开放给其他系统使用。 界面介绍 进入数据服务界面,左侧是展示系统内部已经配置完成的数据服务目录,右侧是展现的对应数据服务的详细配置情况。 目录新增,如下图所…

【云计算与虚拟化】第二章 实验二 Vmware Workstation 15的使用

实验二 Vmware Workstation 15的使用 在上一实验的基础上,将两台虚拟机调节到在桥接模式下,配置相应的网络参数,实现虚拟机1和2能相互通信,虚拟机1和2能够ping通外网,虚拟机1和2能ping通物理机。 (截取…

C++——二分法

二分法(Binary Search)是一种常用的搜索算法,适用于有序列表或数组的查找操作。它的基本思想是将查找范围逐渐缩小一半,直到找到目标元素或确定目标元素不存在。 二分法的步骤如下: 确定查找范围:对于有序…

0Ω的电阻作用

0欧姆电阻即电阻标值为0欧姆的电阻,多用于PCB设计等方面,是一种理想电阻。那0欧姆电阻是表示没有电阻吗?当然不是,0欧姆电阻的阻值不是0欧姆,只是接近0欧姆。 1、调试方便或者兼容设计:可以选择器件、功能…

卷积神经网络的剪枝及其在嵌入式视觉系统中的应用

卷积神经网络的剪枝及其在嵌入式视觉系统中的应用 摘要 在过去的十年里,计算机视觉的最新技术一直是由深度神经网络,特别是卷积神经网络所控制的。无论是分类、语义分割还是目标检测,神经网络现在都是一个无可争议的首选。因此,…