快的離譜! 新的 JS 運行時 WinterJS 來了!每秒 150k 請求,速度超過 Bun、Node.js
WinterJS 1.0 終于發(fā)布了!
WinterJS 是一個使用 Rust 編寫的、與 WinterCG 兼容的 JavaScript 運行時,使用 SpiderMonkey 引擎執(zhí)行 JavaScript,并使用 Tokio 處理底層的 HTTP 請求和 JS 事件循環(huán)。WinterJS 運行時還可以編譯為 WebAssembly,并且因此是第一個完全可在 Wasmer Edge 中運行的生產(chǎn)級運行時。
以下是我們在 WinterJS 1.0 中取得的成就,距離我們的首次公告僅過了四個月:
- 飛快的速度(比 Bun、WorkerD 和 Node 更快!)
- WinterJS 現(xiàn)在完全兼容* WinterCG 規(guī)范
- Cloudflare API 兼容性
- Web 框架支持:Next.js(支持 React 服務器組件?。?、Hono、Astro、SvelteKit 等
現(xiàn)在,讓我們更詳細地了解每個特性!
飛快的速度
WinterJS 1.0 在本地執(zhí)行時能夠處理 150,000 個請求/秒(使用 WASIX 編譯為 Wasm 后為 20,000 個請求/秒)。
截至今日,WinterJS 比 Bun(117,000 請求/秒)、WorkerD(40,000 請求/秒)和 Node(75,000 請求/秒)處理更多的請求/秒(請參見基準測試)。
圖片
WinterCG 兼容性
WinterCG 是負責定義一組全局類和函數(shù)的機構(gòu)之一,這些類和函數(shù)需要存在才能在一組基礎架構(gòu)上正確運行工作負載。
自我們首次公告以來,我們已經(jīng)添加了對完整一套 API 的支持,包括:
- Data fetching:fetch、URL、Request、Response
- Files:Blob、File
- Streams:ReadableStream、WritableStream、TransformStream*
- Text Encoders:TextEncoder、TextEncoderStream、atob、btoa
- Cryptography:crypto*
注意:變換流中的反壓和一些(非常見的)加密算法尚未實現(xiàn)。
Cloudflare API 兼容性
我們希望確保大多數(shù)前端框架在 WinterJS 中都能無縫運行,無需額外處理。因此,我們有兩個選擇:
- 為每個前端框架創(chuàng)建全新的集成
- 加入一個現(xiàn)有的提案
經(jīng)過對 Deno、Cloudflare 和 Fastly 適配器的深入分析,我們意識到最強大的選擇是 Cloudflare,因為它已經(jīng)支持了其他 API 框架的大部分功能,并且可能是最常用的。因此,我們決定采用 Cloudflare API 兼容性。
為了支持 Cloudflare Worker 的工作負載,我們著手解決了四個主要方面的問題:
- 通過 import 語法支持 ES 模塊
- 通過 Node.js 兼容性 API 支持
- 通過node:async_hooks 支持 AsyncLocalStorage
- 通過 _routes.json 支持調(diào)用路由
- 支持文件系統(tǒng)結(jié)構(gòu)
_worker.js
index.html
mystaticimage.jpg
- 支持 Cloudflare 的 WinterCG 自定義 fetch API
export default {
async fetch(request, env, ctx) {
return new Response('Hello World!');
},
}
以及 env.ASSETS API,它允許通過 Rust 的超級優(yōu)化的靜態(tài) Web 服務器直接提供靜態(tài)資產(chǎn),因此您可以執(zhí)行:
export default {
async fetch(request, env) {
const url = new URL(request.url);
if (url.pathname.startsWith('/api/')) {
// TODO: Add your custom /api/* logic here.
return new Response('Ok');
}
// Otherwise, serve the static assets.
// Without this, the Worker will error and no assets will be served.
return env.ASSETS.fetch(request);
},
}
}
[請在此處查看完整的自定義 Cloudflare fetch API:](https://developers.cloudflare.com/workers/runtime-apis/handlers/fetch/)
在獲得所有這些功能之后,我們幾乎可以通過傳遞 --mode=cloudflare 來運行任何其他網(wǎng)絡框架。
winterjs --mode=cloudflare output/static
# OR (using WASIX)
wasmer run wasmer/winterjs --net --mapdir=output/static:/web -- --mode=cloudflare /web
現(xiàn)有 Web 框架的兼容性
由于與 Cloudflare Workers API 的新兼容性,我們現(xiàn)在完全支持以下框架,不僅可以提供框架生成的靜態(tài)網(wǎng)站,還可以讓這些框架進行服務器端渲染(SSR):
- Next.js(應用模板,演示)
- Next.js React 服務器組件(應用模板,演示)- 注意:服務器端獲取緩存尚未實現(xiàn)
- Hono(應用模板,演示)
- Astro.build(應用模板,演示)
- Remix.run(應用模板,演示)
- Svelte(應用模板,演示)
- Gatsby(應用模板,演示)
- Nuxt(應用模板,演示)
支持 React 服務器組件
我們?nèi)〉玫淖罹咛魬?zhàn)性的成就之一是運行具有服務器組件支持的 Next.js 服務器,因此渲染可以完全在服務器端完成。
努力使 React 服務器組件完全可用有助于我們發(fā)現(xiàn)我們的流實現(xiàn)與規(guī)范存在一些細微但重要的差異。我們還意識到我們的獲取實現(xiàn)有一些怪癖需要修復,但最終,在經(jīng)過許多汗水和不眠之夜后,我們完全做到了!??
[您可以查看使用 React 服務器端組件的 Hacker News 演示:](https://next-rsc-hn.wasmer.app/)(請注意,在此演示中,我們沒有在服務器端緩存獲取結(jié)果,因此加載時間可能不是最快的)。
我們現(xiàn)在只差一小步就可以將我們的 Next.js 前端從 Vercel 遷移到 Wasmer Edge,成本更低,而且完全可以在本地重現(xiàn)。
即刻體驗 Wasmer Edge!選擇上述任一應用程序模板,在 Wasmer Edge 上部署您的第一個 WinterJS 應用程序,或按照 JS Worker 快速入門指南操作。
還有一個小細節(jié)… 我們正在準備在 Wasm 空間中完全運行 JIT 編譯的 JS 工作負載……敬請關(guān)注更多更新!
接下來是什么?WinterJS 1.0 只是開始。
在 Wasmer,我們正在開發(fā)一種新的邊緣部署應用程序的方式,通過嘗試邊緣技術(shù),為您的項目開啟令人難以置信的新用例。
作者 | Arshia Ghafoori
翻譯、整理 | 五月君
原文 https://wasmer.io/posts/winterjs-v1