通过WebAssembly在Cloudflare Workers上运行Perl/PAGI应用

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

开发者将Perl经zeroperl编译为WebAssembly,使其可在Cloudflare Workers运行,并加入PAGI支持,让现有Perl异步Web应用无需大改即可部署。项目提供Hello World、WebSocket文字冒险、连接D1/KV/R2的酒窖等演示,工具已发布为npm包。局限是XS模块需专门编译或替换,免费额度不足,也可在浏览器直接运行。

🔎

延伸解读

Perl 在 Cloudflare Workers 上的运行机制

文章介绍了通过 zeroperl 将 Perl 编译为 WebAssembly,并在 Cloudflare Workers 中运行的方法。Worker 加载一个持久化的 Perl 解释器,并将 Cloudflare 的 JavaScript 请求/事件模型桥接到 Perl,使 HTTP 请求以 PAGI 的 $scope、$receive 和 $send 接口呈现。这意味着现有的 PAGI 应用几乎无需修改即可迁移,同时支持 WebSocket 等异步特性。

演示应用与工具链

作者提供了多个演示:Hello World、Perl Fortune、基于 WebSocket 的文字冒险游戏,以及连接 D1、KV 和 R2 的酒窖应用。这些演示展示了 WebDyne 对 htmx 和嵌入式 JSON 的支持。构建和运行时工具已发布为 npm 包 @webdyne/webdyne-zeroperl 及 @webdyne/webdyne-cloudflare,应用仓库只需包含 Perl 代码和依赖,由包处理 WASM 构建和 Cloudflare 集成。

主要限制与注意事项

文章明确指出,纯 Perl 的 CPAN 模块较易打包,但 XS 模块通常需要专门为 WASM 编译或替换为纯 Perl 等价物,因此并非所有现有 Perl 应用都能直接运行。此外,Cloudflare 免费层在包大小和启动时间上的限制使得当前 zeroperl/WebDyne 捆绑包无法在免费层内运行。这些限制意味着该方案更适合能够接受调整或替换 XS 模块的项目。

浏览器中直接运行 Perl 的尝试

作者还展示了一个非严肃的演示:既然 Perl 和 WebDyne 已编译为 WASM,浏览器也可以直接实例化并运行,无需 Cloudflare Worker。用户需下载 4MB 以上的 WASM,即可在本地运行 WebDyne 应用。作者认为目前需求不大,但指出未来 4MB 可能被视为小下载。这为离线或本地开发提供了另一种可能性。

Q&A

如何在Cloudflare Workers上运行Perl应用?

通过将Perl编译为WebAssembly(使用zeroperl),并添加PAGI支持和Cloudflare Worker桥接,使Perl应用能在Cloudflare Workers上运行。

PAGI应用迁移到Cloudflare Workers需要修改代码吗?

不需要大改。HTTP请求以PAGI的$scope、$receive和$send接口呈现,现有PAGI应用几乎无需修改即可运行,同时支持WebSocket等异步特性。

有哪些演示应用展示了这个方案?

包括Hello World、Perl Fortune、WebSocket文字冒险游戏和连接D1/KV/R2的酒窖演示。

这个方案有哪些主要限制?

XS模块需要专门编译为WASM或替换为纯Perl模块;免费额度不足以运行当前bundle;并非所有Perl应用都能直接运行。

工具包如何获取和使用?

构建和运行时工具已发布为npm包@webdyne/webdyne-zeroperl,以及Cloudflare相关包如@webdyne/webdyne-cloudflare。应用仓库包含Perl应用和依赖,包负责构建WASM bundle和Cloudflare/Wrangler集成。

可以在浏览器中直接运行Perl吗?

可以。将Perl和WebDyne编译为WASM后,浏览器也能实例化运行。下载4MB以上的WASM,即可在浏览器中直接运行WebDyne应用。

🏷️

标签

➡️

继续阅读