Vite5.1发布,性能飞跃!

Vite 5 是在去年 11 月发布的,它代表了 Vite 和其生态系统的又一次重大飞跃。几周前,我们庆祝了每周 npm 下载量达到 1000 万次,以及 Vite 仓库有 900 位贡献者。在2月8号,我们很高兴地宣布 Vite 5.1 发布。

运行时 API

Vite 5.1 增加了对新的 Vite 运行时 API 的实验性支持。它允许通过首先使用 Vite 插件处理任何代码来运行代码。它与 server.ssrLoadModule 不同,因为运行时实现与服务器是解耦的。这允许库和框架作者在服务器和运行时之间实现自己的通信层。一旦稳定,这个新的 API 将取代 Vite 当前的 SSR 原生语言。

新 API 带来了许多好处:

在 SSR 期间支持 HMR。

它与服务器解耦,因此对可以使用单个服务器的客户端数量没有限制-每个客户端都有自己的模块缓存(您甚至可以按照自己的意愿与它通信-使用消息通道/fetch 调用/直接函数调用/websocket)。

它不依赖于任何 node/bun/deno 内置 API,因此可以在任何环境中运行。
它很容易与具有自己运行代码机制的工具集成(例如,您可以提供一个跑步者来使用 eval 而不是新的 AsyncFunction)。

最初的想法是由 Pooya Parsa 提出的,并由 Anthony Fu 作为 vite-node 包实现,为 Nuxt 3 Dev SSR 提供动力,后来也用作 Vitest 的基础。因此,vite-node 的总体思路已经经过了相当长时间的实战检验。这是 Vladimir Sheremet 对 API 的新迭代,他已经在 Vitest 中重新实现了 vite-node,并将所学知识用于使 API 在添加到 Vite Core 时更加强大和灵活。PR 花了一年的时间制作,你可以在这里看到它的发展和与生态系统维护者的讨论。

功能

  • 对 .css?url 的改进支持

现在,以 URL 形式导入 CSS 文件的功能已经可靠且正确。这是 Remix 迁移到 Vite 的最后一个障碍。请参见 (#15259)。

  • build.assetsInlineLimit 现在支持回调

用户现在可以提供一个返回布尔值的回调,以选择为特定资产内联或排除内联。如果返回未定义,则应用默认逻辑。

  • 改进对循环导入的 HMR

在 Vite 5.0 中,循环导入内的已接受模块即使在客户端可以很好地处理它们,也总是触发整页重载。现在放宽了这一点,允许 HMR 应用而无需整页重载,但如果 HMR 期间发生任何错误,页面将被重载。

  • 支持 ssr.external: true 将所有 SSR 包外部化

从历史上看,Vite 除了链接的包之外,将所有包外部化。这个新选项可用于强制将所有包(包括链接的包)外部化。这在单体仓库中的测试中很方便,我们希望模拟通常情况下所有包都外部化的情况,或者当使用 ssrLoadModule 加载任意文件时,我们希望始终将包外部化,因为我们不关心 HMR。

  • 在预览服务器中公开 close 方法

预览服务器现在公开了一个 close 方法,该方法将正确地拆除服务器,包括所有打开的套接字连接。

性能改进

Vite 在每次发布时都变得更快,Vite 5.1 包含了性能改进。我们使用 vite-dev-server-perf 为 Vite 4.0 的所有次要版本测量了 10,000 个模块(25 级深度树)的加载时间。这是衡量 Vite 无捆绑方法效果的一个很好的基准。每个模块都是一个小型 TypeScript 文件,其中包含一个计数器并导入树中的其他文件,因此这主要衡量的是请求单独模块所需的时间。在 Vite 4.0 中,在 M1 MAX 上加载 10,000 个模块需要 8 秒。我们在 Vite 4.3 中取得了突破,我们专注于性能,能够在 6.35 秒内加载它们。在 Vite 5.1 中,我们成功实现了另一次性能飞跃。Vite 现在能够在 5.35 秒内提供 10,000 个模块

Vite5.1发布,性能飞跃!
image.png

此基准测试在 Headless Puppeteer 上运行,是比较版本的好方法。但是,它们并不代表用户体验到的时间。在 Chrome 的隐身窗口中运行相同的 10K 模块时,我们有:

Vite5.1发布,性能飞跃!
image.png

性能改进

  • Vite 现在支持在线程中运行 CSS 预处理器。你可以使用 css.preprocessorMaxWorkers: true 启用它。对于 Vuetify 2 项目,启用此功能可将开发启动时间减少 40%。
  • 新选项以改善服务器冷启动:你可以设置 optimizeDeps.holdUntilCrawlEnd: false 以切换到新的依赖项优化策略,这可能对大型项目有帮助。我们正在考虑在未来默认使用此策略。。
  • 通过缓存检查提高解析速度:fs.cachedChecks 优化现在默认启用。在 Windows 上,tryFsResolve 的速度提高了约 14 倍,在三角形基准测试中,解析 ID 的速度总体提高了约 5 倍。
  • 内部性能改进:开发服务器有几个渐进式的性能改进。添加了一个新的中间件来短路 304。我们避免在热点路径中解析请求。Rollup 现在正确地延迟加载。

弃用:

  • 我们继续减少 Vite 的 API 表面积,以使项目长期可维护。
  • 在 import.meta.glob 中弃用选项:标准已转移到导入属性,但我们目前不打算用新选项替换它。相反,建议用户切换到查询。
  • 删除实验性的构建时预捆绑:构建时预捆绑是 Vite 3 中添加的实验性功能,现已删除。随着 Rollup 4 将其解析器切换为原生,以及 Rolldown 的开发,该功能的性能和开发与构建不一致的问题已不再有效。我们希望继续改善开发/构建一致性,并得出结论,使用 Rolldown 进行“开发时预捆绑”和“生产构建”是更好的选择。Rolldown 还可以以比依赖项预捆绑更高效的方式实现缓存。

最后欢迎关注公众号web前端进阶,为您带来前端优质文章以及前端最新动向

译自: https://vitejs.dev/blog/announcing-vite5-1.html

原文始发于微信公众号(web前端进阶):Vite5.1发布,性能飞跃!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/231905.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!