【V8引擎blog翻译-190】WebAssembly JSPI将进行原始试用

63 阅读3分钟

发布时间06三月2024·标记归类 WebAssembly

WebAssembly的JavaScript Promise Integration(JSPI)API正在进入原始试用,Chrome发布M123。这意味着您可以测试您和您的用户是否可以从这个新的API中受益。

JSPI是一种API,它允许所谓的顺序代码(已编译为WebAssembly)访问异步的Web API。许多Web API都是根据JavaScript Promises精心制作的:它们不会立即执行请求的操作,而是返回Promise来执行。当最终执行该操作时,浏览器的任务运行器将调用Promise的任何回调。JSPI挂钩到这个架构中,允许WebAssembly应用程序在Promise返回时挂起,并在Promise解析时恢复。

你可以在这里找到更多关于JSPI的信息,以及如何使用它,规范本身也在这里

要求

除了注册Origin试用版外,您还需要生成相应的WebAssembly和JavaScript。如果你使用的是Emscripten,那么这很简单。您应该确保您使用的是至少3.1.47版本。

注册Origin试用

JSPI仍然处于预发布阶段;它正在经历一个标准化过程,直到我们进入该过程的第4阶段才会完全发布。要在今天使用它,您可以在Chrome浏览器中设置一个标志;或者,您可以申请一个原始试用令牌,允许您的用户访问它,而无需自己设置标志。

要注册,您可以在这里,请确保按照注册注册过程。要了解更多关于起源试验的一般情况,是一个很好的起点。

一些潜在的警告

WebAssembly社区中已经就JSPI API的某些方面进行了一些讨论。因此,有一些变化表明,这将需要时间来充分发挥其作用,通过系统。我们预计这些变化将是软启动:我们将分享变化,因为他们变得可用,但是,现有的API将保持至少到原产地试验结束。

此外,还有一些已知的问题不太可能在原产地试用期内得到完全解决:

对于密集创建派生计算的应用程序,包装序列(即,使用JSPI访问异步API)可能会受到影响。这是因为创建包装调用时使用的资源不会在调用之间缓存;我们依赖于垃圾收集来清除创建的堆栈。
我们目前为每个包装调用分配一个固定大小的堆栈。为了适应复杂的应用程序,该堆栈必须很大。但是,这也意味着,在运行中有大量简单包装调用的应用程序可能会遇到内存压力。

这两个问题都不太可能妨碍JSPI的实验;我们希望在JSPI正式发布之前解决这些问题。

反馈

由于JSPI是一个标准跟踪工作,我们希望在这里分享任何问题和反馈。但是,您可以在标准的Chrome错误报告网站上提交错误报告。如果怀疑代码生成有问题,请使用此选项报告问题。

最后,我们想听听你发现的任何好处。使用issue tracker来分享您的经验。