WebAssembly 和 PHP:这是什么,为什么需要?意想不到的网络组合

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么 PHP 开发者应该关注 WebAssembly?

\n\n

网页开发的世界日新月异。如果您使用 PHP 编写代码,您可能已经习惯了经典模式:服务器处理请求,生成 HTML 并将其发送给客户端。但是,如果我告诉您,有一种技术可以让您在用户的浏览器中直接运行繁重的计算,从而减轻服务器的负担呢?是的,这可以通过使用 PHP 和 WebAssembly (Wasm) 来实现。

\n\n

听起来像科幻小说?完全不是。WebAssembly 是一种低级二进制格式,在浏览器中几乎以原生速度运行。而 PHP,得益于 php-wasm 和 Wasmer 等项目,已经学会了编译成 Wasm。在本文中,我们将分析这是什么,为什么需要它,以及最重要的是,它在代码中是什么样子的。准备好惊讶吧:您最喜欢的语言现在不仅可以在服务器上运行。

\n\n

用简单的话说,什么是 WebAssembly?

\n\n

想象一下,浏览器是一个操作系统。以前,它只能运行 JavaScript。现在,它有了第二个“处理器”——WebAssembly。这不是要取代 JS,而是一个强大的补充。Wasm 允许以接近机器码的速度执行 C、C++、Rust 以及 PHP 代码。

\n\n

Wasm 的关键特性:

\n
    \n
  • 安全性:在浏览器的隔离沙箱中执行。
  • \n
  • 速度:加载和编译只需毫秒。
  • \n
  • 可移植性:同一个二进制文件可以在 Chrome、Firefox、Safari 和 Edge 中运行。
  • \n
\n\n

对于 PHP 开发者来说,这打开了一扇通往新世界的大门,您最喜欢的语言可以在前端运行,执行复杂的数学运算或处理图像,而无需向服务器发送任何请求。

\n\n

为什么需要 PHP 和 WebAssembly 一起使用?三个杀手级场景

\n\n

1. 减轻服务器负担:客户端计算

\n

假设您有一个脚本,可以将 CSV 转换为 JSON 或压缩图像。通常这会由服务器处理。使用 Wasm,您可以将此脚本发送到浏览器,所有工作都在用户的计算机上完成。服务器会感谢您,用户也会因为速度而感谢您。

\n\n

2. 无需服务器运行遗留代码

\n

您有一个只能在特定环境中运行的旧 PHP 库?将其编译成 Wasm,然后直接在浏览器中运行。无需 Docker 容器,无需环境配置。只需一个 .wasm 文件,然后从 JavaScript 调用即可。

\n\n

3. 创建交互式工具

\n

想制作一个在线代码编辑器,可以直接在浏览器中执行 PHP 脚本?或者一个基于 PHP 的物理模拟器?Wasm 让这一切成为现实。用户编写代码,浏览器执行它——无需等待网络请求。

\n\n

这是如何工作的?工具和编译

\n

要将 PHP 转换为 WebAssembly,需要使用专门的工具。最流行的是 Emscripten,它将 C/C++ 代码编译成 Wasm。PHP 是用 C 编写的,因此可以编译。预编译的构建可以在 GitHub 上的 php-wasm 仓库中找到。

\n\n

第二种方法是使用 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)看起来是这样的:

\n\n
<!DOCTYPE html>\n<html>\n<head>\n    <title>通过 Wasm 在浏览器中运行 PHP</title>\n<                

博客

书籍推荐