为Vercel Functions引入字节码缓存

为Vercel Functions引入字节码缓存

💡 原文英文,约600词,阅读约需3分钟。
📝

内容提要

Vercel推出了字节码缓存的实验性功能,以减少大型应用的冷启动延迟并提升启动速度。通过缓存JavaScript源代码的字节码,后续冷启动可直接使用缓存,测试显示冷启动时间可减少多达27%。用户需使用Node.js 20及支持CommonJS的框架来尝试此功能。

🔎

延伸解读

字节码缓存如何加速冷启动

冷启动时,JavaScript 源代码需先解析并编译为字节码,才能被 V8 执行。字节码缓存将首次执行生成的字节码保存下来,后续冷启动直接加载执行,省去编译步骤。Vercel 的测试显示,页面越大,冷启动时间减少越明显,最大可达 27%。这意味着大型应用能获得更显著的启动速度提升。

实测数据:不同规模应用的效果差异

Vercel 用三个 Next.js 应用测试,主页面大小分别为 250 kB、550 kB 和 800 kB。启用字节码缓存后,TTFB 分别降低 12%、15% 和 27%,计费时长分别减少 58%、54% 和 48%。数据表明,应用越大,冷启动优化越明显,同时计费时长也大幅下降,有助于降低运行成本。

技术实现:克服无服务器文件系统限制

常见的 v8-compile-cache 包在无服务器平台难以使用,因为冷启动时文件系统是临时的。Vercel 自研的字节码缓存实现解决了这一问题,允许所有后续冷启动复用生成的缓存。系统还能智能合并不同路由懒加载产生的字节码块,随着流量增加,缓存不断优化,冷启动速度持续提升。

试用条件与限制

目前该功能为实验性,仅适用于生产部署。要尝试需使用 Node.js 20,且框架需编译为 CommonJS,例如 Next.js。通过设置环境变量 USE_BYTECODE_CACHING=1 并重新部署即可启用。Vercel 计划未来利用 Node.js 22 的新选项支持 ES Modules。

❓

Q&A

Vercel的字节码缓存功能有什么作用?

字节码缓存功能旨在减少大型应用的冷启动延迟,提升启动速度,冷启动时间可减少多达27%。

如何使用Vercel的字节码缓存功能?

用户需使用Node.js 20及支持CommonJS的框架(如Next.js),并在项目设置中添加环境变量USE_BYTECODE_CACHING=1。

字节码缓存是如何提高冷启动速度的?

字节码缓存通过缓存JavaScript源代码的字节码,后续冷启动可直接使用缓存,避免重复编译,从而加快启动速度。

Vercel字节码缓存的实验性功能有什么测试结果?

测试显示,字节码缓存能显著减少冷启动时间,例如,某应用的冷启动时间从1548ms减少到1130ms,减少幅度达27%。

字节码缓存如何克服无服务器平台的限制?

字节码缓存的实现克服了无服务器平台的文件系统临时性限制,允许所有后续冷启动使用生成的字节码缓存。

Vercel Functions如何处理字节码块?

Vercel Functions会智能合并所有字节码块,以便在应用程序流量增加时实现更快的冷启动。

🏷️

标签

➡️

继续阅读