WinterJS

WinterJS 是一个根据 Winter Community Group 规范运行 Service Workers 脚本的高性能 JavaScript 服务器。

WinterJS 能够在单台笔记本上处理高达 100,000 个请求/秒(请参见基准测试)。

注意:尽管在名称中共享“Winter”,WinterJS 并未得到 WinterCG 的官方认可。有许多支持 WinterCG 的运行时,WinterJS 只是其中之一。

使用 Wasmer 运行 WinterJS

WinterJS 服务器发布在 Wasmer 中,名称为 wasmer/winterjs。

您可以在本地运行 HTTP 服务器:

  1. wasmer run wasmer/winterjs --net --mapdir=tests:tests tests/simple.js

其中 simple.js 内容如下:

  1. addEventListener('fetch', (req) => {
  2. req.respondWith(new Response('hello'));
  3. });

本地运行 WinterJS

您可以通过以下方式本地运行 WinterJS:

  1. cargo run -- tests/simple.js

然后在 https://localhost:8080/ 访问服务器。

WasmerJS 的工作原理

WinterJS 由 SpiderMonkey、Spiderfire 和 hyper 提供支持,为您的 JavaScript 应用程序带来了新的强大功能。

WinterJS 使用 WASIX 标准编译为 WebAssembly。请注意,目前编译为 WASIX 是一个复杂的过程。我们建议使用来自 wasmer/winterjs 的预编译版本,但如果您需要本地编译为 WASIX,请提出问题。

限制

WinterJS 是早期、预发布的软件。它目前尚未完全符合 WinterCG 规范,运行时本身仍在不断完善中。尚不建议在生产中使用 WinterJS。有关更多信息,请参阅下面的 API 兼容性部分。

WinterCG API 兼容性

随着 API 的添加/修复,本部分将进行更新。如果本节缺少某个 API,则意味着该 API 尚未实现。

以下词汇用于描述 API 的状态:

✅ 稳定 - 该 API 已实现,并完全符合规范。这不考虑本机代码中可能存在的未发现的实现错误。 🔶 部分 - 该 API 已实现,但未完全符合规范和/或存在已知限制。 ❌ 待处理 - 尚未实现该 API。

API 状态 备注
console ✅ 稳定
fetch 🔶 部分 在 fetch 被视为稳定之前,需要稳定请求
URL ✅ 稳定
URLSearchParams ✅ 稳定
Request 🔶 部分 Request.formData 不支持解序列化 multipart/form-data 主体
Headers ✅ 稳定
Response ✅ 稳定
Blob 🔶 部分 Blob.stream() 尚未实现
File 🔶 部分 Blob 必须在 File 可以被视为稳定之前稳定
FormData ✅ 稳定
TextDecoder ✅ 稳定
TextDecoderStream ✅ 稳定
TextEncoder ✅ 稳定
TextEncoderStream 🔶 部分 跨两个块分布的代理对没有正确处理
ReadableStream 和支持类型 ✅ 稳定
WritableStream 和支持类型 ✅ 稳定
TransformStream 和支持类型 🔶 部分 未实现背压
atob ✅ 稳定
btoa ✅ 稳定
performance.now() ✅ 稳定
performance.timeOrigin ❌ 待处理
crypto ✅ 稳定
crypto.subtle 🔶 部分 仅支持 HMAC、MD5 和 SHA 算法