为什么 PHP 开发者应该关注 WebAssembly?
\n\n网页开发的世界日新月异。如果您使用 PHP 编写代码,您可能已经习惯了经典模式:服务器处理请求,生成 HTML 并将其发送给客户端。但是,如果我告诉您,有一种技术可以让您在用户的浏览器中直接运行繁重的计算,从而减轻服务器的负担呢?是的,这可以通过使用 PHP 和 WebAssembly (Wasm) 来实现。
\n\n听起来像科幻小说?完全不是。WebAssembly 是一种低级二进制格式,在浏览器中几乎以原生速度运行。而 PHP,得益于 php-wasm 和 Wasmer 等项目,已经学会了编译成 Wasm。在本文中,我们将分析这是什么,为什么需要它,以及最重要的是,它在代码中是什么样子的。准备好惊讶吧:您最喜欢的语言现在不仅可以在服务器上运行。
用简单的话说,什么是 WebAssembly?
\n\n想象一下,浏览器是一个操作系统。以前,它只能运行 JavaScript。现在,它有了第二个“处理器”——WebAssembly。这不是要取代 JS,而是一个强大的补充。Wasm 允许以接近机器码的速度执行 C、C++、Rust 以及 PHP 代码。
\n\nWasm 的关键特性:
\n- \n
- 安全性:在浏览器的隔离沙箱中执行。 \n
- 速度:加载和编译只需毫秒。 \n
- 可移植性:同一个二进制文件可以在 Chrome、Firefox、Safari 和 Edge 中运行。 \n
对于 PHP 开发者来说,这打开了一扇通往新世界的大门,您最喜欢的语言可以在前端运行,执行复杂的数学运算或处理图像,而无需向服务器发送任何请求。
\n\n为什么需要 PHP 和 WebAssembly 一起使用?三个杀手级场景
\n\n1. 减轻服务器负担:客户端计算
\n假设您有一个脚本,可以将 CSV 转换为 JSON 或压缩图像。通常这会由服务器处理。使用 Wasm,您可以将此脚本发送到浏览器,所有工作都在用户的计算机上完成。服务器会感谢您,用户也会因为速度而感谢您。
\n\n2. 无需服务器运行遗留代码
\n您有一个只能在特定环境中运行的旧 PHP 库?将其编译成 Wasm,然后直接在浏览器中运行。无需 Docker 容器,无需环境配置。只需一个 .wasm 文件,然后从 JavaScript 调用即可。
3. 创建交互式工具
\n想制作一个在线代码编辑器,可以直接在浏览器中执行 PHP 脚本?或者一个基于 PHP 的物理模拟器?Wasm 让这一切成为现实。用户编写代码,浏览器执行它——无需等待网络请求。
\n\n这是如何工作的?工具和编译
\n要将 PHP 转换为 WebAssembly,需要使用专门的工具。最流行的是 Emscripten,它将 C/C++ 代码编译成 Wasm。PHP 是用 C 编写的,因此可以编译。预编译的构建可以在 GitHub 上的 php-wasm 仓库中找到。
第二种方法是使用 Wasmer。这是一个 WebAssembly 运行时,不仅可以在浏览器中运行,也可以在服务器上运行。使用它,您可以从 PHP 脚本中调用 Wasm 模块。是的,PHP 可以调用用其他语言编写并打包成 Wasm 的代码!
\n\n代码示例:PHP + WebAssembly 实战
\n\n让我们从理论转向实践。考虑两个场景:在浏览器中运行 PHP 以及从 PHP 调用 Wasm。
\n\n场景 1:在浏览器中运行 PHP 函数
\n假设我们有一个编译好的文件 php-wasm.wasm。我们想执行一个简单的数字相加函数。在客户端(HTML + JavaScript)看起来是这样的:
<!DOCTYPE html>\n<html>\n<head>\n <title>通过 Wasm 在浏览器中运行 PHP</title>\n<