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 上的完整更新日志。

可能需要采取的行动

  1. 为了充分利用 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)
  2. 如果将 TSX 与 Vue 一起使用,请在 Removed: Global JSX Namespace 中检查所需的操作。
  3. 确保您不再使用任何已弃用的特性(如果使用了,控制台中应该有警告告诉您)。它们可能在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 还对响应式系统进行了实质性的重构,目的是提高计算属性的重新计算效率。

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

const count = ref(0)
const isEven = computed(() => count.value % 2 === 0)watchEffect(() => console.log(isEven.value)) // logs truecount.value = 2 // logs true again

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

此外,在 3.4 中:

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

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

defineModel 现在稳定了

Context: RFC#503

defineModel 是一个新的 `` 宏,旨在简化支持 v-model .它之前在 3.3 中作为实验性功能发布,并在 3.4 中升级为稳定状态。现在,它还为修 v-model 饰符的使用提供了更好的支持。

相关文件:

  • Revised Component v-model section
  • defineModel API reference

v-bind 同名速记

Context: PR#9451

您现在可以缩短此时间:

<img :id="id" :src="src" :alt="alt">

对比:

<img :id :src :alt>

过去经常请求此功能。最初,我们担心它的用法与布尔属性混淆。然而,在重新审视了这个特性之后,我们现在认为,考虑到它的动态特性,它的行为更像 JavaScript 而不是原生属性是有意义的 v-bind

改进了水合不匹配错误

Context: PR#5953

3.4 版本对水和(Hydration)不匹配错误消息进行了多项改进:

  1. 改进了措辞 (由服务器呈现与客户端预期呈现)。
  2. 该消息现在包含有问题的 DOM 节点,因此您可以在页面或元素面板中快速找到它。
  3. 冻结不匹配检查现在也适用于类、样式和其他动态绑定属性。

此外,在3.4 版本中还添加了一个新的编译时标志, __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ 标志可用于强制冻结不匹配错误,即使在生产环境中也包含完整的细节。

错误代码和编译时标志参考

为了减小 bundle 大小,Vue 在生产构建中丢弃了长错误消息字符串。然而,这意味着在生产环境中被错误处理程序捕获的错误将收到简短的错误代码,如果不深入研究 Vue 的源代码,这些错误代码很难破译。

为了改进这一点,我们在文档中添加了一个生产错误参考页面。错误代码是从最新版本的 Vue 稳定版本自动生成的。

我们还添加了编译时标志参考,其中包含有关如何为不同的生成工具配置这些标志的说明。

删除了已弃用的功能

全局 JSX 命名空间

从 3.4 开始,Vue 默认不再注册全局 JSX 命名空间。这是避免与 React 发生全局命名空间冲突所必需的,以便两个库的 TSX 可以共存于同一个项目中。这应该不会影响使用最新版本的 Volar 的 SFC 的用户。

如果您使用的是 TSX,则有两种选择:

  1. 在升级到 3.4 之前,在tsconfig.json 中将 jsxImportSource 显式设置为 'vue'。您还可以通过在文件顶部添加 /* @jsxImportSource vue */ 注释来选择加入每个文件。
  2. 如果您的代码依赖于全局 JSX 命名空间的存在,例如使用 JSX.Element 类型等,则可以通过显式引用 vue/jsx 来保留 3.4 之前的确切全局行为,这将注册全局 JSX 命名空间。

请注意,这是次要版本中的纯类型中断性变更,它遵循我们的发布策略。

其他已删除的功能

  • 反应性转换在 3.3 版本中被标记为已弃用,现在在 3.4 版本中删除。由于该功能是实验性的,因此此更改不需要 在major 版本。希望继续使用该功能的用户可以通过 Vue Macros 插件进行。
  • app.config.unwrapInjectedRef 已被删除。它在 3.3 中已弃用并默认启用。在 3.4 中,无法再禁用此行为。
  • @vnodeXXX 模板中的事件侦听器现在是编译器错误,而不是弃用警告。请改用 @vue:XXX 侦听器。
  • v-is 指令已被删除。它在 3.3 中已弃用。请改用带 vue: 前缀的 is 属性。

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

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

相关文章

晶圆代工降价竞争进入白热化,降幅最高15% | 百能云芯

随着半导体产业的不确定性和市况回落&#xff0c;晶圆代工市场再次掀起波澜&#xff0c;“降价大军”再添猛将。 据综合媒体报道&#xff0c;传三星计划在2024年第一季度调降晶圆代工报价&#xff0c;提供5%至15%的折扣&#xff0c;并表示愿意进一步协商。 台积电根据客户的投产…

一、Vue3组合式基础[ref、reactive]

一、ref 解释&#xff1a;ref是Vue3通过ES6的Proxy实现的响应式数据&#xff0c;其与基本的js类型不同&#xff0c;其为响应式数据&#xff0c;值得注意的是&#xff0c;reactive可以算是ref的子集&#xff0c;ref一般用来处理js的基本数据类型如整型、字符型等等(也可以用来处…

Java集合框架深度解析-ArrayList

Java的集合框架提供了一组实现常用数据结构的类和接口。理解集合框架对于Java程序员来说至关重要&#xff0c;因为它们在日常编程中广泛应用。 为什么需要集合框架&#xff1f; 在编程中&#xff0c;我们经常需要存储和操作一组对象。集合框架提供了用于表示和操作对象组的通…

从 YOLOv1 到 YOLO-NAS 的所有 YOLO 模型:论文解析

在计算机视觉的浩瀚领域&#xff0c;有一支耀眼的明星&#xff0c;她的名字传颂着革新与突破的传奇——YOLO&#xff08;You Only Look Once&#xff09;。回溯时光&#xff0c;走进这个引人注目的名字背后&#xff0c;我们仿佛穿越进一幅画卷&#xff0c;一幅展现创新魅力与技…

Unity之预制体与变体

PS:不用说了&#xff0c;我在写博客就是在摸鱼 一、预制体 不知道大家小时候有没有看过火影&#xff0c;记得剧情最开始的时候水木哄骗鸣人去偷封印之书&#xff0c;反而让鸣人学会了多重影分身之术&#xff1a; 好了&#xff0c;小编绞尽脑子终于想好怎么向大家介绍预制体了&a…

Java中包装类型使用‘==’比较的坑

1、缓冲机制 在Java中&#xff0c;Integer 、Byte 、Short 、Long 、Character 五大包装类都有缓冲机制&#xff0c; 且缓冲的默认值范围都是 -128 ~ 127 而Float 、Double 、Boolean 三大包装类并没有缓冲机制。 2、创建包装类对象 两种方法&#xff1a; &#xff08;1&am…

PageHelper 使用示例

1. mapper 层返回的 List 的泛型和 service 层返回的PageInfo 的泛型类型一致&#xff1a; Override public PageInfo<VO1> queryVO1List(String startTime,String endTime,Integer pageNum,Integer pageSize) {boolean pageStarted false;try {PageHelper.startPage( …

经典目标检测YOLO系列(一)复现YOLOV1(4)VOC2007数据集的读取及预处理

经典目标检测YOLO系列(一)复现YOLOV1(4)VOC2007数据集的读取及预处理 之前&#xff0c;我们依据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;提出了新的YOLOV1架构&#xff0c;并解决前向推理过程中的两个问题&#xff0c;继续按照此书进行YOLOV1的复现。 经典目标检…

【漏洞复现】通天星CMSV6车载监控平台任意文件下载漏洞

Nx01 产品简介 深圳市通天星科技有限公司&#xff0c;是一家以从事计算机、通信和其他电子设备制造业为主的企业。通天星车载视频监控平台软件拥有多种语言版本。应用于公交车车载视频监控、校车车载视频监控、大巴车车载视频监控、物流车载监控、油品运输车载监控、警车车载视…

十七:爬虫-JS逆向(上)

1、什么是JS、JS反爬是什么&#xff1f;JS逆向是什么? JS:JS全称JavaScript是互联网上最流行的脚本语言&#xff0c;这门语言可用于HTML 和 web&#xff0c;更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。JavaScript 是一种轻量级的编程语言。JavaScript 是…

数据结构—图(上)

文章目录 12.图(上)(1).图的基本概念#1.图的基本定义#2.边的分类#3.数据结构的一些规定#4.子图#5.完全图#6.路径#7.连通性和连通分量#8.度 (2).图的存储方式#1.邻接矩阵#2.邻接表 (3).图的遍历#1.深度优先搜索(Depth First Search)i.走个迷宫ii.DFS的思想iii.代码实现 #2.广度优…

不可狗尾续貂的tail

文章目录 不可狗尾续貂的tail常规使用显示N行从第N行显示按照字符显示特别赞的一个实时更新的功能更多信息不可狗尾续貂的tail tail命令用来查看文件尾部的n行,如果没有指定的n,默认显示10行。 命令格式: $ tail [option] [filename] 参数option比较常用的如下所示: -f…

LeetCode-无重复字符的最长子串(3)

题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 代码&#xff1a; class Solution {public int lengthOfLongestSubstring(String s) {Set<Character> occnew HashSet<Character>();int lens.length();int…

解决Element-Plus中el-switch的change方法自动触发问题

下面el-switch代码片段是在el-table里使用 <el-switch v-else-if"col.prop status" v-model"scope.row.status" :active-value"0" :inactive-value"1" :before-change"beforeStatus" change"changStatus(scope.r…

Yolov5/8的小程序部署前后端实现

Yolov5/8的小程序部署前后端实现 导语本机配置硬件环境配置 前端实现后端实现总结参考文献 导语 毕设的题目与Yolo系列的图像识别相关&#xff0c;通过搜查了很多资料和实践最后完成&#xff0c;看到某些平台上居然卖300&#xff0c;觉得很离谱&#xff0c;所以决定把代码开源…

Springcloud alibab和dubbo有什么区别?

Spring Cloud Alibaba 和 Dubbo 都是为了简化企业级应用开发而生的框架&#xff0c;尤其是在分布式系统和微服务架构的背景下。 虽然他们在某些功能上有重叠&#xff0c;但各有侧重点和使用场景。 微服务架构图 首先介绍一下 Spring Cloud Alibaba&#xff1a; Spring Cloud …

C++自制小游戏《屠夫躲猫猫》

大家好&#xff0c;我是派蒙&#xff0c;我写了一个《屠夫躲猫猫》的游戏&#xff0c;下面是源代码&#xff1a; #include <stdio.h> #include <conio.h> #include<bits/stdc.h> #include<windows.h> using namespace std; string ID[1001]; string N…

Fiddler抓取https原理?

首先fiddler截获客户端浏览器发送给服务器的https请求&#xff0c; 此时还未建立握手。 第一步&#xff0c; fiddler向服务器发送请求进行握手&#xff0c; 获取到服务器的CA证书&#xff0c; 用根证书公钥进行解密&#xff0c; 验证服务器数据签名&#xff0c; 获取到服务器C…

数据结构学习 jz34 二叉树中和为某一值的路径

关键词&#xff1a;回溯 二叉树 前序遍历 路径记录 因为我没有仔细接触过二叉树的遍历过程&#xff0c;所以我是懵懵懂懂按照dfs的方法写的。没想到写对了&#xff0c;看了解答发现这叫做二叉树的前序遍历。用时29min。 这让我明白了前序遍历和dfs原来是有相同之处的。&#…

Local server not started, start with 报错python -m weditor

一、python -m weditor 如图报错 Local server not started, start with 报错 二、解决方案 右上角选择新的无痕窗口下&#xff0c;然后打开 http://localhost:17310/ 即可