Repolode
WebAssembly

WebAssembly/binaryen

面向 WebAssembly 的 C++ 编译与优化基础库,附带 wasm-opt 等命令行工具和 binaryen.js。

Star
8,666
Fork
899
未关闭 Issue
580
最近提交
8小时前

这是什么?

Binaryen 是一个用 C++ 编写的 WebAssembly 编译与工具链基础库,提供简单的 C API,也可以在 JavaScript 中调用。它既接受类似 WebAssembly 的文本形式输入,也支持通用的控制流图,内部 IR 设计上便于快速编译为 WebAssembly,并可并行执行优化。

内置的优化器包含大量 Pass,用于减小代码体积并提升运行速度,重点是 WebAssembly 特有的优化,例如局部变量复用、死代码消除、内联和数据段打包等。主要命令行工具 wasm-opt 可对 wasm 文件运行这些优化,配套工具还包括 wasm 的汇编与反汇编、通过 wasm2js 转为 JavaScript、模块合并、测试用例缩减以及解释执行。

Emscripten、wasm-pack、Kotlin/Wasm 和 Flutter 的 Web 构建等工具链将 Binaryen 作为组件使用,AssemblyScript 和 Grain 等编译器则将其作为库调用。

核心功能

  • 01包含大量面向 WebAssembly 的优化 Pass,用于减小体积并提升速度
  • 02提供 wasm-opt 命令行工具,可优化和转换 wasm 文件
  • 03wasm2js 可将 WebAssembly 编译为 ES6 JavaScript 模块
  • 04提供简洁的 C API 和 binaryen.js,便于在代码中构建和优化模块
  • 05wasm-merge、wasm-metadce、wasm-reduce 等工具分别用于合并、裁剪和缩减 wasm 文件

适用场景

  • 缩减和加速由 C、C++、Rust 或 Kotlin 工具链生成的 WebAssembly 输出
  • 在不支持原生 wasm 的环境中,将 WebAssembly 编译为 JavaScript
  • 发布前将多个 wasm 模块合并为一个文件
  • 在 JavaScript 或 C 代码中以编程方式构建 WebAssembly 模块

使用前须知

  • 默认文本输出不一定是有效的 WebAssembly 文本,如需有效文本,请使用 --generate-stack-ir --print-stack-ir。

标签

常见问题

binaryen 是什么?
面向 WebAssembly 的 C++ 编译与优化基础库,附带 wasm-opt 等命令行工具和 binaryen.js。 Binaryen 是一个用 C++ 编写的 WebAssembly 编译与工具链基础库,提供简单的 C API,也可以在 JavaScript 中调用。它既接受类似 WebAssembly 的文本形式输入,也支持通用的控制流图,内部 IR 设计上便于快速编译为 WebAssembly,并可并行执行优化。
binaryen 可以免费使用吗?用的什么许可证?
binaryen 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
binaryen 还在维护吗?
活跃维护中。binaryen 最近一次提交是在 2026年10月21日。
binaryen 适合用来做什么?
缩减和加速由 C、C++、Rust 或 Kotlin 工具链生成的 WebAssembly 输出 在不支持原生 wasm 的环境中,将 WebAssembly 编译为 JavaScript 发布前将多个 wasm 模块合并为一个文件 在 JavaScript 或 C 代码中以编程方式构建 WebAssembly 模块
在哪里获取 binaryen?
源代码和安装说明在 GitHub 上:https://github.com/WebAssembly/binaryen

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目