WinterJS
WinterJS 是一个根据 Winter Community Group 规范运行 Service Workers 脚本的高性能 JavaScript 服务器。
WinterJS 能够在单台笔记本上处理高达 100,000 个请求/秒(请参见基准测试)。
注意:尽管在名称中共享“Winter”,WinterJS 并未得到 WinterCG 的官方认可。有许多支持 WinterCG 的运行时,WinterJS 只是其中之一。
使用 Wasmer 运行 WinterJS
WinterJS 服务器发布在 Wasmer 中,名称为 wasmer/winterjs。
您可以在本地运行 HTTP 服务器:
wasmer run wasmer/winterjs --net --mapdir=tests:tests tests/simple.js
其中 simple.js 内容如下:
addEventListener('fetch', (req) => {
req.respondWith(new Response('hello'));
});
本地运行 WinterJS
您可以通过以下方式本地运行 WinterJS:
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 算法 |