Vue3中提到的Tree-shaking

news2024/12/27 12:53:41

我们知道,Vue3中提到一个叫Tree-shaking的东西,其实也并不是一个新的东西,有人称之为"摇树优化",什么意思?
按照作者的原话解释,Tree-shaking其实就是:把无用的模块进行“剪枝”,很多没有用到的API就不会打包到最后的包里

下面具体来看看尤大怎么说的吧

vue3一个比较大的显著的区别就是,当你用一个bundler的时候,比如webpack或者rollupwebpackrollup都是有tree shaking功能,但是tree shaking的前提是所有的东西都必须用ES6 moduleimport来写

vue3在浏览器里的时候依然会由一个全局的Vue对象,但是当你用了一个bundler时(比如webpack),它就没有default export,你就不能import xxx from vue,然后把vue本身当一个对象去操作。那所有的这些API全部要用import的方式import进来,这样的结果就是使得一些可能不会用到的一些功能就可以被tree shaking掉。比如说 v-model<transition>这些功能,如果你不用的话,就不会引用到最后的包里。

Tree-shaking某种程度上来讲,也是通过编译器去实现的(记住这句话)。举例来说

可以看到,空的渲染函数没有从vue中引入任何东西

但是如果加入一个div

可以看见它引入一些东西,比如createVNode, openBlock, createBlock。这些东西只有当你引入东西的时候,这些东西才会被打包进去。
但默认的还是会保留一些最低的限制,比如Virtual DOM的更新算法以及响应式系统,无论如何这两个都是会包含在你得包里的。但是很多常用或者非常用的功能,只有当你用到时才会被import进来,比如v-model

可以看见,从vue中引入了vModelText, createVNode, withDirectives, openBlock, createBlock

如果input类型改成checkbox,就会引入的是vModelCheckbox

如果改成动态的type就会引入动态的v-model,即vModelDynamic

再比如<transition>组件,用了<transition>,对应的Transition就会引入进来

image.png

所以没如果没用到,就不会引入进来。所以没有引入的东西最终就可以被tree shaking

所以,如果只写一个hello worldvue3的实际尺寸,即最终打包出来的整个应用的size,是13.5kb。如果去掉对2.0 option API等的支持,最终打包出来是11.75kb。而所有的可选的运行时的东西全部一起加进来是22.5kb。这比现在vue2的整个尺寸还要小,而且还是在加了很多vue3的新功能的基础上

以上就是尤大对Tree-shaking的解析

之前让大家记住的一句话,为什么尤大说某种程度上来讲,Tree-shaking是通过编译器去实现的
其实说白了,Tree-shaking本质并不是Vue3的东西,而是那些打包工具的功能。只是Vue3代码结构调整,当用webpack等打包工具打包项目时,webpack会将那些没用用到的代码不打包到最后的项目中,这样使得项目体积更小
主要原理:依赖es6的模块化的语法,将无用的代码(dead-code)进行剔除!

上述测试网址:https://vue-next-template-explorer.netlify.app/

最后编辑于:2024-09-25 21:03:28


喜欢的朋友记得点赞、收藏、关注哦!!!

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

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

相关文章

小程序配置文件

Author&#xff1a;Dawn_T17&#x1f965; 目录 官方开发文档 配置文件 全局配置文件—app.json pages字段 window字段 tabBar字段 页面配置文件—*.json 项目配置文件 project.config.json 和 project.private.config.json 配置sass以及不同的*SS区别 预处理器…

学习Flask框架

Flask简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug &#xff0c;模板引擎则使用 Jinja2 。Flask使用 BSD 授权。 Flask也被称为 “microframework” &#xff0c;因为它使用简单的核心&#xff0c;用 extension 增加其他功能。Flask没…

ssm淘乐乐员工购物商城

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 目 录 III 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 2 第2章 开发环境与技术 3 …

函数编程:让开发完全专注于代码

作为一名开发者&#xff0c;我过去常常被各种环境配置和部署问题困扰&#xff0c;特别是当项目依赖复杂时&#xff0c;总要花费大量时间在配置服务器、调试环境上。最近&#xff0c;我在使用 TitanIDE 后有了一些全新的开发体验&#xff0c;尤其是它的 函数编程 功能&#xff0…

七、安全运营—概念

控制特权帐号&#xff1a; 账号类型&#xff1a;

众数信科AI智能体智慧文旅解决方案——智能旅行助手

智慧文旅解决方案 智能旅行助手方案 利用先进的AI算法 提供个性化旅游体验的智能服务 众数信科AI智能体 产品亮点 旅游路线智能规划 旅游景点智能问答 旅行游记智能生成等 构建旅行实用指南 让旅游更加便捷、高效、智能化 关于我们 众数信科成立于2021年&#xff0c;由…

操作系统 | 学习笔记 | 王道 | 4.1 文件系统基础

4.文件管理 4.1 文件系统基础 4.1.1 文件的基本概念 定义 文件是以计算机硬盘为载体的存储在计算机上的信息集合&#xff0c;在用户进行的输入、输出中&#xff0c;以文件位基本单位。 文件管理系统是实现的文件的访问、修改和保存&#xff0c;对文件维护管理的系统。 文件的…

Ngx+Lua+Redis 快速存储POST数据

系统几万台设备有windows有安卓还有linux系统&#xff0c;每个设备三分钟就会向服务器post设备的硬件信息&#xff0c;数据格式json&#xff0c;后台管理界面只需要最新的数据&#xff0c;不需要历史数据&#xff0c;业务逻辑非常简单&#xff0c;PHP代码就几行&#xff0c;已经…

Python selenium库学习使用实操四

系列文章目录 Python selenium库学习使用实操 Python selenium库学习使用实操二 Python selenium库学习使用实操三 文章目录 系列文章目录[TOC](文章目录) 前言一、元素获取二、选项解析总结 前言 在Python selenium库学习使用实操二中提到了下拉框的操作&#xff0c;一种是标…

Redis持久化机制(RDBAOF详解)

目录 一、Redis持久化介绍二、Redis持久化方式1、RDB持久化(1) 介绍(2) RDB持久化触发机制(3) RDB优点和缺点(4) RDB流程 2、AOF(append only file)持久化(1) 介绍(2) AOF优点和缺点(3) AOF文件重写(4) AOF文件重写流程 三、AOF和RDB持久化注意事项 一、Redis持久化介绍 Redis…

YOLOv5复现(论文复现)

YOLOv5复现&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 YOLOv5复现&#xff08;论文复现&#xff09;概述模型结构正负样本匹配策略损失计算数据增强使用方式训练测试验证Demo 概述 YOLOv5是由Ultralytics公司于2020年6月开源的目标检…

uniapp顶部提示栏实现

效果&#xff1a; 用途&#xff1a;用于展示较短系统通知 实现逻辑&#xff1a; 1.通过请求获取该显示的通知内容&#xff0c;目前所考虑的字段有&#xff1a; {id: 200, // 通知标识&#xff0c;后续会用其阻止用户关闭后无休止开启message: "请勿以系统规定的其它…

与ZoomEye功能类似的搜索引擎还有哪些?(渗透课作业)

与ZoomEye功能类似的搜索引擎有&#xff1a; Shodan&#xff1a;被誉为“物联网的搜索引擎”&#xff0c;专注于扫描和索引连接到互联网的各种设备&#xff0c;如智能家居设备、工业控制系统、摄像头、数据库等。它提供全球互联网设备的可视化视图&#xff0c;帮助用户了解网络…

ssm图书管理系统的设计与实现

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 课题研究背景 1 1.2课题研究现状 1 1.3课题实现目的和意义 …

【C++】模拟实现hash_table(哈希表)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 &#x1f4cc;实现HashNode类模板 &#x1f38f;构造HashNode类成员变量 &#x1f38f;实现HashNode类构造函数…

高效研究:Zotero的7个插件让你事半功倍

还在为海量文献管理头疼吗?还在为找不到合适的插件犯愁吗?别急,今天我就要带你解锁Zotero的终极武器 - 那些让你爱不释手的必备插件! 作为一个从小白到文献管理达人的过来人,我可以负责任地说:没有这些插件,你的Zotero只能发挥一半功力!安装了这些插件,你的效率绝对能飙升! …

字典树(单词查找树、Trie树)

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int f[N][26], idx, cnt[N]; void insert(char str[]) {int p 0;for(int i 0; str[i]; i){int u str[i] - a;if(!f[p][u]) f[p][u] idx;p f[p][u];}cnt[p]; } int query(char str[]) …

相亲交友系统的商业模式探讨

在撰写关于相亲交友系统的商业模式探讨时&#xff0c;附带示例代码可能不太合适&#xff0c;因为软文通常是面向非技术读者&#xff0c;讲述商业模式、用户体验等方面的内容。不过&#xff0c;为了满足您的需求&#xff0c;我可以尝试结合一些简单的伪代码&#xff08;模拟代码…

CSS 3D转换

在 CSS 中&#xff0c;除了可以对页面中的元素进行 2D 转换外&#xff0c;您也可以对象元素进行 3D转换&#xff08;将页面看作是一个三维空间来对页面中的元素进行移动、旋转、缩放和倾斜等操作&#xff09;。与 2D 转换相同&#xff0c;3D 转换同样不会影响周围的元素&#x…

Cursor编辑器:10秒生成完美Git提交信息!

Cursor编辑器&#xff1a;10秒生成完美Git提交信息&#xff01; 亲爱的开发者们&#xff0c;是否还在为编写规范的Git提交信息而头疼&#xff1f;今天&#xff0c;就让我们一起揭开Cursor编辑器的神秘面纱&#xff0c;探索如何一键生成专业的Git Commit Message&#xff0c;让…