终极指南:JavaScript 运行时兼容性大比拼

发表时间: 2024-03-24 22:37

最近想整理一篇 JavaScript 运行时对比的文章,今天查找资料时,看到一位推友分享的 JavaScript 运行时 API 兼容性对比网站,各种 API 对比总结的很全面,现在分享给大家,希望对大家有所帮助!

这个网站数据是 UnJS 团队开源的,展示了 API 在不同 JavaScript 运行时的兼容性。数据通过 mdn-bcd-collector 的运行时测试自动生成,并以 MDN browser-compat-data 格式发布 [1][2][3]。

对于大多数前端开发者而言,可能对 Node.js、Deno、Bun 这几个比较熟悉,对 edge-light、LLTR、fastly、netlify、wasmer、workerd 确很少听说。下面将对这些运行时做一下详细介绍。

Node.js

https://nodejs.org/en

Node.js 是最常用的 JavaScript 运行时,被 Stack Overflow 开发人员评为2023年最流行的网络技术。Node.js 由 Ryan Dahl 创建,于 2009 年发布。当前最新版本为 v20.11.1(LTS) 和 21.7.1 版本。Node.js 官网最近也进行 UI 和 UX 升级。

更多阅读:Node.js 新官网来了,UI 和 UX 全面升级,欢迎体验和反馈!2024 年轻量级 Node.js 框架,我选择?

Deno

https://deno.com/

Deno 是一个基于 Rust 的 JavaScript 运行时。与 Node.js 一样,它也是由 Ryan Dahl 创建并发布的,希望能改进 Node.js 中提供的功能。Deno 的主要重点之一是提高 Node.js 的安全性,并旨在更好地支持 JSX 和 TypeScript,以更好地面向 Web 标准。

Deno 拥有一个工具生态系统,使开发人员能够快速启动他们的项目。Fresh 是专为 Deno 打造的网络框架,最新版本为 1.6.6,而 Lume 则是其静态网站生成器

更多阅读:Deno 1.4 正式发布;Deno fmt 比 prettier 快 20 倍!Deno 推出新 NPM 替代方案

Bun

https://bun.sh/

Bun 是一个快速的全能工具包,用于运行、构建、测试和调试 JavaScript 和 TypeScript(从单个文件到全栈应用程序)。Bun 的核心是一个快速的 JavaScript 运行时,旨在取代 Node.js。它是用 Zig 语言编写的,并在底层由 JavaScriptCore 提供支持,大大减少了启动时间和内存使用。

2022年7月,Bun v0.1.1发布,Githu Star 数成指数级增长,成为年度最火的前端项目。随着2023年9月 v1.0 版本的发布,Bun 彻底火爆,被广大前端开发者圈粉。

最新消息,Bun windows 版本即将发布,当前测试用例已经通过 94.53%,这也预示着 Bun Windows 版本即将和大家见面,感兴趣的可以关注。

更多阅读:Bun 为什么火了?Windows版Bun发布进入倒计时!Bun 1.0.29 正式发布,这个特性改进带来速度提升 6756 倍!

edge-light

https://github.com/vercel/edge-runtime

Edge Runtime 是标准 Web API 的一个子集,可与最多的环境兼容和互操作,它旨在帮助框架作者采用边缘计算,并提供基于 Web 标准的开源工具。它旨在集成到框架(如 Next.js)中,而不是用于应用程序代码。该运行时特意采用了最小化设计,以保证安全性和速度。

当您的框架基于 Edge Runtime 构建时,它可以在 Node.js 运行的任何地方运行。部署到 Vercel 等基础架构时,Next.js 等框架会自动为您提供最佳基础架构。

LLTR

https://github.com/awslabs/llrt

LLRT(低延迟运行时)是一种轻量级 JavaScript 运行时,旨在满足对快速高效的无服务器应用程序日益增长的需求。与在 AWS Lambda 上运行的其他 JavaScript 运行时相比,LLRT 的启动速度最多可提高 10 倍以上,总体成本最多可降低 2 倍[4]。

LLRT 由 Rust 构建,使用 QuickJS 作为 JavaScript 引擎,确保高效的内存使用和快速启动。

请注意:LLRT 是一个实验性软件包。它可能会发生变化,仅供评估之用。它也不打算与 Node 兼容,尽管 WinterCG 可能是一个更现实的目标。它并不打算成为 bun 那样的通用运行时。它的竞争对手是 workerd 和 Lagon。

更多阅读:AWS 开源 JavaScript 运行时 LLRT!

fastly

https://github.com/fastly/js-compute-runtime

Fastly Compute 是一个基于开放标准的高级无服务器平台,可在我们的全球边缘网络上以您最喜爱的语言运行您的代码。它旨在满足现代应用程序开发的要求,使客户能够在一个高度安全的执行环境中运行代码,在边缘网络上实现微秒级的冷启动时间[5]。

netlify

https://docs.netlify.com/edge-functions/overview/

边缘功能概述 Edge Functions 将 Netlify 平台和工作流程与网络边缘的开放运行时标准连接起来。这使您能够利用开发工具生态系统构建快速、个性化的网络体验[6]。

使用 TypeScript 和 JavaScript,您可以修改网络请求以本地化内容、提供相关广告、验证访问者身份、A/B 测试内容等。边缘功能还支持新一代边缘优先网络框架,允许您的整个应用程序在边缘运行,从而显著提高性能。

所有这些动态处理都是在一个基于 Deno 的安全运行时中进行的,直接来自最靠近每个用户的全球网络边缘位置,以实现快速响应时间。此外,您还可以选择缓存边缘功能响应,以获得更快的响应时间。使用 Netlify,您的边缘功能与 Netlify 网站的其他部分一起进行版本控制、构建和部署。这消除了开销,并为您的边缘功能带来了部署预览和回滚的功能。

wasmer/winterjs

https://github.com/wasmerio/winterjs

WinterJS 1.0 号称是最快的 JavaScript Web 服务器,在单 CPU 内核上每秒可处理 58,000 多个请求。它旨在与 Cloudflare Apps 无缝协作,并支持 React Server Components,从而加快网站开发速度。它允许在部分应用程序中使用 Rust 等语言,有望提高性能。它对速度和 Cloudflare 集成感到兴奋,但对它的新颖性和大型项目的准备情况感到担忧[7]。

workerd

https://github.com/cloudflare/workerd

workerd 是一个 JavaScript / Wasm 服务器运行时,其代码与 Cloudflare Workers 的代码相同。workerd(读作"worker dee"),名字来自 Unix 命名服务器的传统,后缀"-d"代表守护进程,该名称没有大写,因为它是一个程序名称,而在类 Unix 环境中,程序名称通常是小写的[8]。您可能会用到它:

  • 作为应用程序服务器,自行托管为 Cloudflare Workers 设计的应用程序。
  • 作为开发工具,在本地开发和测试此类代码。
  • 作为可编程 HTTP 代理(正向或反向),有效拦截、修改和路由网络请求。


以上就是对所有运行时的介绍,如果你也对此感兴趣,可以点击文中链接进行深入了解。


参考资料:

  1. https://runtime-compat.unjs.io/
  2. Fresh: https://github.com/denoland/fresh
  3. Lume: https://lume.land/
  4. lltr: https://github.com/awslabs/llrt
  5. fastly compute: https://github.com/fastly/js-compute-runtime
  6. edge function: https://docs.netlify.com/edge-functions/overview/
  7. winterjs: https://github.com/wasmerio/winterjs
  8. workerd: https://github.com/cloudflare/workerd