首页 > web前端 > js教程 > WebAssembly 简介

WebAssembly 简介

Linda Hamilton
发布: 2025-01-20 12:29:13
原创
592 人浏览过

WebAssembly (WASM) – 深入探讨:第 1 部分

这篇文章开启了探索 WebAssembly 的系列。 在下面查找该系列其他部分的链接。

WebAssembly,或 WASM,是一种低级的、类似汇编的语言,旨在运行在 Web 浏览器中使用各种编程语言构建的应用程序。 其跨平台特性和底层设计提供了接近原生的速度,解锁了以前仅使用 JavaScript 无法实现的 Web 功能。 如果您渴望能够处理计算密集型任务的更快的 Web 应用程序,那么 WASM 就是解决方案。本介绍将涵盖 WASM 的核心功能、其起源以及如何开始使用它。

什么是 WebAssembly?

WebAssembly 是专为 Web 浏览器设计的低级编译目标。 它不是一种直接执行的语言;相反,它定义了一个类似程序集的结构,其他语言可以将其编译成。这个“编译目标”方面是关键。

考虑这个 C 代码示例:

<code class="language-c">int a = 1;
int b = 2;
int c = a + b;</code>
登录后复制
登录后复制

C 编译器将其翻译为汇编指令(或机器代码):

<code class="language-assembly">mov eax, 1    ; Load 1 into register EAX
mov ebx, 2    ; Load 2 into register EBX
add eax, ebx  ; Add EAX and EBX, result in EAX</code>
登录后复制
登录后复制

这又会产生二进制表示:

<code>00000000000000000000000000000011</code>
登录后复制
登录后复制

(注意:确切的二进制输出因 CPU 架构而异。这是一个简化的说明。)

Introduction to WebAssembly

C 代码转换为汇编代码,然后转换为二进制文件——可由计算机直接执行。 WebAssembly 修改了这个过程。 编译器可能会生成:

,而不是标准汇编
<code>$a int
$b int
$c int

set $a 1
set $b 2
set $c = add $a $b</code>
登录后复制
登录后复制

(这是仅用于说明目的的假设语法,并非实际的 WASM 语法。)

Introduction to WebAssembly

如果所有浏览器都能理解这种语法,它将彻底改变 Web 开发。 C、Rust 和 Go 等语言的编译器可以生成此输出,从而使浏览器能够执行用任何语言编写的程序,无论操作系统或浏览器如何。

W3C 定义的 WebAssembly 规范确保浏览器对 WASM 的处理保持一致。 主流浏览器已经原生支持 WebAssembly。

WebAssembly 表示

WebAssembly 有两种主要格式:

  • WAT(WebAssembly 文本): 用于调试和代码理解的文本格式。
  • WASM(WebAssembly 模块): 用于浏览器执行的二进制格式。

这些格式是可以互换的; WAT 可以转换为 WASM,反之亦然。 编译为任一版本都是可能的。

基本 WebAssembly 语法 (WAT)

让我们回顾一下使用 WAT 的示例:

  1. 声明三个32位整型变量:
<code class="language-c">int a = 1;
int b = 2;
int c = a + b;</code>
登录后复制
登录后复制
  1. 赋值:
<code class="language-assembly">mov eax, 1    ; Load 1 into register EAX
mov ebx, 2    ; Load 2 into register EBX
add eax, ebx  ; Add EAX and EBX, result in EAX</code>
登录后复制
登录后复制
  1. 添加并存储结果:
<code>00000000000000000000000000000011</code>
登录后复制
登录后复制

WebAssembly 使用堆栈机。 get_local 将值压入堆栈,i32.add 添加堆栈顶部的两个元素,set_local 存储结果。 WASM 二进制等效项是:

<code>$a int
$b int
$c int

set $a 1
set $b 2
set $c = add $a $b</code>
登录后复制
登录后复制

虽然这看起来很复杂,但请记住 WASM 是编译目标,而不是主要编程语言。 您通常会使用高级语言编写代码并编译为 WASM。

WebAssembly 会取代 JavaScript 吗?

不。 WASM 旨在补充 JavaScript,而不是取代它。 JavaScript 擅长 DOM 操作和基本的 Web 交互,而 WASM 则以接近原生的性能处理计算密集型任务。 这种协同作用可以实现高效的任务分配。

WebAssembly 用例

WASM 的性能使其非常适合:

  1. 图像和视频处理
  2. 游戏(包括 3D)
  3. 音乐应用
  4. 密码学
  5. 可视化工具
  6. 模拟器和模拟器

现有 WASM 应用程序的示例包括 Figma、Amazon Prime Video 和 Google Earth。

超越浏览器的 WebAssembly

虽然最初以浏览器为中心,但 WASM 的功能通过 WASI(WebAssembly 系统接口)扩展到了 Web 之外。 WASI 提供标准 API,允许从单个二进制文件创建跨平台应用程序,从而无需特定于平台的构建。

WebAssembly 之前

之前的几个项目尝试在浏览器中运行其他语言,但由于缺乏标准化、安全漏洞或性能问题(ActiveX、Java Applets、Flash、NaCl、asm.js、Dart),经常面临限制。 WebAssembly 通过标准化、可移植性、安全性、性能和可扩展性解决了这些缺点。

结论

本介绍提供了 WebAssembly 的高级概述。后续帖子将更深入地探讨特定主题并探索实用的 WebAssembly 项目。

以上是WebAssembly 简介的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板