当前位置:首页 > Vue.js > 正文

Vue 3.4 发布

本文为翻译

原文地址:Announcing Vue 3.4 | The Vue Point --- Vue 3.4 发布公告 |Vue 点 (vuejs.org)

今天,我们很高兴地宣布 Vue 3.4 “🏀灌篮高手”的发布!

此版本包括一些实质性的内部改进 - 最引人注目的是重写的模板解析器,速度提高了 2 倍,以及重构的反应系统,使效果触发更加准确和高效。它还包含许多生活质量 API 改进,包括绑定 prop 时的 defineModel 稳定性和新的同名速记。

这篇文章概述了 3.4 中的突出功能。有关更改的完整列表,请参阅 GitHub 上的完整更新日志。

可能需要采取的行动

为了充分利用 3.4 中的新功能,建议在升级到 3.4 时还更新以下依赖项:

Volar / vue-tsc@^1.8.27 (required)@vitejs/plugin-vue@^5.0.0 (如果使用 Vite)nuxt@^3.9.0 (如果使用 Nuxt)vue-loader@^17.4.0 (如果使用 webpack or vue-cli)

如果将 TSX 与 Vue 一起使用,请在 Removed: Global JSX Namespace 中检查所需的操作。

确保您不再使用任何已弃用的特性(如果使用了,控制台中应该有警告告诉您)。它们可能在3.4中被删除了。

亮点功能

解析速度提高 2 倍,SFC 构建性能提高

Context: PR#9674

在 3.4 中,我们完全重写了模板解析器。以前,Vue 使用递归下降解析器,它依赖于许多正则表达式和前瞻搜索。新的解析器使用基于 htmlparser2 中的分词器的状态机分词器,该分词器仅循环访问整个模板字符串一次。其结果是,对于各种大小的模板,解析器的速度始终是原来的两倍。由于我们广泛的测试用例和 ecosystem-ci,它也 100% 向后兼容 Vue 最终用户。

在将新的解析器与系统的其他部分集成时,我们还发现了一些进一步提高整体 SFC 编译性能的机会。基准测试显示,在生成源映射的同时编译 Vue SFC 的脚本和模板部分时,有 ~44% 的改进,因此 3.4 应该会为大多数使用 Vue SFC 的项目带来更快的构建速度。但是,请注意,在现实世界项目中,Vue SFC 编译只是整个构建过程的一部分。与孤立的基准测试相比,端到端构建时间的最终收益可能要小得多。

在 Vue 核心之外,新的解析器还将有利于 Volar / vue-tsc 的性能,以及需要解析 Vue SFC 或模板的社区插件,例如 Vue 宏。

更高效的反应系统

Context: PR#5912

3.4 还对响应式系统进行了实质性的重构,目的是提高计算属性的重新计算效率。

为了说明正在改进的内容,让我们考虑以下方案:

js复制代码const count = ref(0)
const isEven = computed(() => count.value % 2 === 0)

watchEffect(() => console.log(isEven.value)) // logs true

count.value = 2 // logs true again

在 3.4 之前,即使计算结果保持不变,每次 count.value 都将触发 watchEffect 的回调。在 3.4 之后的优化中,回调现在仅在计算结果实际更改时触发。

此外,在 3.4 中:

多个计算的 dep 更改仅触发一次同步效果。数组的 shiftunshiftsplice 方法仅触发一次同步效果。

除了基准测试中显示的收益外,这应该会减少许多场景中不必要的组件重新渲染,同时保持完全的向后兼容性。

defineModel现在稳定了

Context: RFC#503

defineModel 是一个新的

Vue

有话要说...