当前位置: 首页 > ops >正文

Vue 3.0中Treeshaking特性

Vue 3.0中Treeshaking特性

什么是 Tree Shaking?

Tree Shaking 是一种优化技术,用于移除 JavaScript 上下文中未使用的代码。在 Vue 3.0 中,通过模块化的设计和 ES Modules 的支持,实现了更高效的 Tree Shaking 功能。这意味着如果某个功能或方法没有被显式使用,它就不会被打包到最终的应用程序中。

Vue 2 和 Vue 3 的对比

在 Vue 2 中,由于 Vue 实例是一个单例对象,所有的 API 都会被默认加载到项目中,即使有些功能并未实际使用。这导致了即使只用了少量的功能,整个框架的核心文件也会全部包含在打包结果中。

而在 Vue 3 中,核心库进行了重构,API 被拆分为独立的小型模块。例如,reactivity 模块负责响应式系统的实现,而 runtime-dom 模块则专注于模板编译和 DOM 渲染等功能。这样的设计让开发者可以根据需要按需引入所需的模块,从而显著减少打包体积。

示例:Vue 3 中的 Tree Shaking 应用

假设在一个简单的 Vue 3 项目中,我们只需要使用 refcomputed 来构建一个基本组件:

// 只导入必要的 API
import { ref, computed } from 'vue';export default {setup() {const count = ref(0); // 创建一个响应式的计数器const doubleCount = computed(() => count.value * 2); // 计算属性return { count, doubleCount }; // 将状态暴露给模板}
};

在这个例子中,只有 refcomputed 被显式导入并使用,其他任何 Vue 提供的功能都不会出现在最终的打包文件中。

再来看另一个场景,如果我们还需要使用生命周期钩子(如 onMounted),只需额外导入这个特定的钩子即可:

import { ref, computed, onMounted } from 'vue';export default {setup() {const count = ref(0);const doubleCount = computed(() => count.value * 2);onMounted(() => {console.log('Component has been mounted');});return { count, doubleCount };}
};

这里可以看到,除了之前提到的 refcomputed,新增加了一个 onMounted 方法,但它也不会影响那些未使用的功能进入打包范围。

数据驱动的例子

假如我们在组件中有三个数据项 (var1, var2, var3),其中前两个参与视图渲染逻辑,最后一个完全没被引用:

<template><div>{{ var1 }} {{ var2 }}</div> <!-- var3 并未在此处显示 -->
</template><script>
import { reactive } from 'vue';export default {setup() {const state = reactive({var1: 'Hello',var2: 'World',var3: 'Unused', // 此字段不会对页面产生效果});return { ...state }; // 返回所有状态},
};
</script>

当运行打包命令时,现代 bundler 工具(如 Webpack 或 Vite)能够识别出 var3 没有被实际消费掉,并将其从最终产物中剔除。


在这里插入图片描述

http://www.xdnf.cn/news/4764.html

相关文章:

  • Nacos源码—6.Nacos升级gRPC分析二
  • 从SiC到数字孪生:PSR芯片的技术迭代与未来布局
  • windows10 系统显示mov文件格式缩略图
  • 使用Hyper-V 安装Windows11操作系统
  • 缺乏实体人形机器人的主流高精度仿真方案
  • Matlab 分数阶PID控制
  • 数组和指针典型例题合集(一维数组、字符数组、二维数组)
  • python: 列表切片
  • Python Cookbook-7.8 使用 Berkeley DB 数据库
  • 最优化方法Python计算:有约束优化应用——线性Lasso回归预测器
  • 【Go】优化文件下载处理:从多级复制到零拷贝流式处理
  • PyTorchVideo实战:从零开始构建高效视频分类模型
  • 单片机自动排列上料控制程序 下
  • MySQL基础关键_012_事务
  • Modbus RTU 转 PROFINE 网关
  • k8s术语之CronJob
  • 计算机网络-LDP标签发布与管理
  • 4H-SiC 射频功率MESFET 的表面态分析
  • 【自定义指令】(el-table表格内容自动轮播)
  • Elastic:什么是 AIOps?
  • [人机交互]设计,原型建立和构造
  • mysql 数据库初体验
  • Cursor+AI辅助编程-优先完成需求工程结构化拆解
  • 【前端分享】CSS实现3种翻页效果类型,附源码!
  • 解决Ceph 14.2.22 Nautilus版本监视器慢操作问题的实践指南
  • 【Touching China】2012-2016
  • 从 CFD 到 DEM:积鼎流体仿真技术拓展与协同互补之路
  • 破解老龄化困局:国家政策扶持与智慧养老实践路径
  • 关于form、自定义Hook、灰度发布、正则表达(只能输入数字和不要空格)
  • 笔试专题(十六)