WinterJS 是一个非常快的、与 WinterCG 兼容的 Javascript 运行时,使用 Rust 编写,使用 SpiderMonkey 引擎执行 JavaScript,并使用 Tokio 处理底层 HTTP 请求和 JS 事件循环。WinterJS 运行时也可以编译为 WebAssembly,因此是第一个完全可在 Wasmer Edge 中运行的生产级运行时。
以下是 WinterJS 在首次发布后的四个月内为 WinterJS 1.0 所取得的成就:
- 极快的速度(比 Bun、WorkerD 和 Node 更快)
- WinterJS 现在与 WinterCG 规范完全兼容
- Cloudflare API 兼容性
- Web 框架支持:Next.js(支持 React Server Components)、Hono、Astro、SvelteKit 等
极快的速度
现在,让我们更详细地了解每个功能!
WinterJS 1.0 在本机执行时能够每秒处理 150k 请求(使用WASIX编译为 Wasm 时每秒能够处理 20k 请求)。
截至今天,WinterJS 每秒可以处理的请求数比 Bun、WorkerD 和 Node 更多。
WinterCG 兼容性
WinterCG 是负责定义一组全局类和函数的机构之一,这些类和函数需要存在,以便在一组基础设施上正确运行工作负载。
自首次发布以来,WinterJS 增加了对整套 API 的支持,包括:
- Data fetching:
fetch
、URL
、Request
、Response
- Files:
Blob
、File
- Streams:
ReadableStream
、WritableStream
、TransformStream*
- Text Encoders:
TextEncoder
、TextEncoderStream
、atob
、btoa
- Cryptography:
crypto*
注意:转换流中的背压和一些(非常见)加密算法尚未实现
Cloudflare API 兼容性
WinterJS 希望确保大多数前端框架在 WinterJS 中都能无缝运行,无需额外处理。因此 WinterJS 有两个选择:
- 为每个前端框架创建全新的集成
- 加入一个现有的提案
经过对 Deno、Cloudflare 和 Fastly 适配器的深入分析,WinterJS 的开发团队意识到最强大的选择是 Cloudflare,因为它支持了其他 API 框架的大部分功能,并且可能是最常用的。因此 WinterJS 决定采用 Cloudflare API 兼容性。
为了支持 Cloudflare Worker 的工作负载,WinterJS 着手解决了四个主要方面的问题:
- 通过 import 语法支持 ES 模块
- 通过 Node.js 兼容性 API 支持
- 通过 node:async_hooks 支持 AsyncLocalStorage
- 通过 _routes.json 支持调用路由
- 支持文件系统结构
- 支持 Cloudflare 的 WinterCG 自定义 fetch API
在获得所有这些功能之后,我们只需要通过传递 --mode=cloudflare
来运行任何其他网络框架。
Web 框架支持
由于与 Cloudflare Workers API 的新兼容性,WinterJS 现在完全支持以下框架,不仅为框架生成的静态网站提供服务,还允许这些框架进行服务器端渲染(SSR):
- Next.js
- Hono
- Astro
- Remix
- Svelte
- Gatsby
- Nuxt
支持 React 服务器组件
WinterJS 取得的最具挑战性的成就之一是运行带有服务器组件支持的 Next.js 服务器,因此渲染可以完全在服务器端完成。
您可以查看使用 React 服务器端组件演示版 Hacker News,请注意在此演示中,WinterJS 没有在服务器端缓存获取结果,因此加载时间可能不是最快的。
WinterJS 现在距离将 Next.js 前端从 Vercel 迁移到 Wasmer Edge 只有一个小步骤了。成本更低并且具有完整的本地可再现性。
下一步是什么
WinterJS 1.0 仅仅是一个开始。Wasmer 正在开发一种在边缘部署应用程序的新方法,尝试前沿技术,为您的项目实现令人难以置信的新用例。