前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >号称迄今最快?又一个新的 JavaScript 运行时发布了!

号称迄今最快?又一个新的 JavaScript 运行时发布了!

作者头像
ConardLi
发布2024-03-22 12:25:03
3290
发布2024-03-22 12:25:03
举报
文章被收录于专栏:code秘密花园

大家好,我是 ConardLi

今天和大家一起来聊聊最近又一个新发布的 JavaScript 运行时:WinterJS

WinterJS 简介

WinterJS 是一款极快的 WinterCG 兼容的 Javascript 运行时,它使用 SpiderMonkey 引擎执行 JavaScript,并使用 Tokio 处理底层的 HTTP 请求和 JS 事件循环。WinterJS 运行时还可以被编译为 WebAssembly,因此它也是第一个可以完全在 Wasmer Edge 上运行的生产级别的运行时。

名词有点多,可能有些大家还不清楚,我补充解释下:

WinterCG:这是一个专注于协作和提高 JavaScript 运行时环境的 API 兼容性的社区。特别是在非浏览器的运行环境中,它们致力于提高各大 Web 平台 API 的兼容性。他们通过在运行环境之间进行讨论,向规范制定团体(如 WHATWG、W3C)提出新的 Web API 或对当前 Web API 的修改提议,以及对现有运行环境行为的文档化,来完成这些工作。

自首次发布以来,WinterCG 就对以下常见 API 进行了兼容:

  • 数据获取:fetch, URL, Request,Response
  • 文件:Blob,File
  • 流:ReadableStream, WritableStream, TransformStream
  • 文本编码器:TextEncoder, TextEncoderStream, atob,btoa
  • 密码学:crypto

SpiderMonkeyMozilla(火狐)的 JavaScript 引擎,也是首个 JavaScript 引擎,由 Brendan Eich 发起开发。能够解析和执行 JavaScript 代码,在 Web 浏览器或其他项目中运行。

Tokio:是 Rust 社区广泛使用的异步运行时,对于基于 Rust 的异步 I/O 或基于网络的应用开发尤为实用。它提供了一套用于开发高效,可扩展和可靠的应用程序的工具。

WinterJS 使用

下面是个最简单的示例,首先我们创建一个 serviceworker.js 文件:

代码语言:javascript
复制
addEventListener('fetch', (req) => {
  req.respondWith(new Response('hello code秘密花园!'));
});

下面这行简单的命令就可以直接运行 WinterJS

代码语言:javascript
复制
$ wasmer run wasmer/winterjs --net --mapdir /app:. /app/serviceworker.js

WinterJS 也可以使用 Rust ( cargo install --git https://github.com/wasmerio/winterjs && winterjs serviceworker.js) 本地运行。

WinterJS 1.0

距离 WinterJS 首次发布已经过去四个月时间了,如今 WinterJS 1.0 正式发布了,又带来了如下惊喜:

  • 极致的速度(比 Bun、WorkerDNode.js 更快)
  • WinterJS 现在完全与 WinterCG 规范兼容
  • 支持 Cloudflare API
  • 支持 Web 框架:Next.js(支持 React 服务器组件!)、Hono、AstroSvelteKit 等。

速度起飞

WinterJS 1.0 在本机执行时能够每秒处理 150k 请求(使用 WASIX 编译为 Wasm 时每秒能够处理 20k 请求)。

截至目前,WinterJS 每秒可以处理的请求数比 Bun:117k reqs/sWorkerD:40k reqs/sNode 75k reqs/s 都要更多。

兼容 Cloudflare API

如果希望确保大多数的前端框架能在 WinterJS 中无缝运行,有以下两个选择:

  • 为每个前端框架创建新的集成
  • 加入现有的提案

通过深度分析 Deno、CloudflareFastly 的适配器,我们发现最强大的选项是 Cloudflare,因为它已经支持了其他 API 框架的大多数,而且它可能是最常在实际生产中使用的。因此,WinterJS 选择了 Cloudflare API 的兼容性。

为了支持 Cloudflare WorkerWinterJS 做了以下四个主要方面的开发(:

  • 通过 import 语法支持 ES 模块
  • 支持 Node.js 兼容性 API
  • 通过 node:async_hooks 支持 AsyncLocalStorage
  • 通过 _routes.json 支持调用路由
  • 支持文件系统结构:
代码语言:javascript
复制
_worker.js
index.html
mystaticimage.jpg

支持 CloudflareWinterCG 自定义获取 API

代码语言:javascript
复制
export default {
 async fetch(request, env, ctx) {
  return new Response('Hello World!');
 },
}

此外,env.ASSETS API 允许直接通过 Rust 的静态 Web 服务器(static-web-server)提供静态资源:

代码语言:javascript
复制
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);
  },
}

与现有 Web 框架的兼容性

由于与 Cloudflare Workers API 的新兼容性,WinterJS 现在完全支持以下框架,不仅为框架生成的静态网站提供服务,还允许这些框架进行服务器端渲染 (SSR):

  • Next.js
  • Hono
  • Astro.build
  • Remix.run
  • Svelte
  • Gatsby
  • Nuxt

可以到这里查看以上框架的 Demo:https://wasmer.io/templates/nextjs-starter

另外,WinterJS 目前还完美支持 React 最新的 Server Components,这个是很多 JavaScript 运行时还无法做到的事。

可以到这里查看 React Server Components 的 Demo:https://next-rsc-hn.wasmer.app/

想了解更多内容大家可以到以下两个地方:

  • Github:https://github.com/wasmerio/winterjs
  • 官方博客:https://wasmer.io/posts/winterjs-v1
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 code秘密花园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WinterJS 简介
  • WinterJS 使用
  • WinterJS 1.0
  • 速度起飞
  • 兼容 Cloudflare API
  • 与现有 Web 框架的兼容性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档