2023 年 WebAssembly 运行时的性能

2023 年 WebAssembly 运行时的性能

💡 原文中文,约10000字,阅读约需24分钟。
📝

内容提要

自2013年以来,Emscripten项目使得在网络浏览器中使用libsodium成为可能。引入WebAssembly后,可以更有效地在Web浏览器中运行非JavaScript代码。libsodium在2017年增加了对WebAssembly的支持,提升了速度。与JavaScript一样,相同的代码可以在多个平台上无缝运行。应用程序开始在服务器端使用WebAssembly。wasm32-wasi用于对运行时进行基准测试。WebAssembly运行时有多个选择,每个都有其独特的功能和性能表现。

🎯

关键要点

  • 自2013年以来,Emscripten项目使得在网络浏览器中使用libsodium成为可能。
  • 引入WebAssembly后,可以更有效地在Web浏览器中运行非JavaScript代码。
  • libsodium在2017年增加了对WebAssembly的支持,提升了速度。
  • 与JavaScript一样,相同的代码可以在多个平台上无缝运行。
  • 应用程序开始在服务器端使用WebAssembly,提供了安全性和沙箱特性。
  • wasm32-wasi用于对运行时进行基准测试,多个运行时支持该目标。
  • libsodium基准测试被广泛用于优化运行时和衡量WebAssembly的影响。
  • 大多数其他运行时项目似乎已被放弃,WebAssembly的性能建议仍未普遍实现。
  • 编写与各种运行时兼容的应用程序是一个挑战,批量内存操作是个例外。
  • libsodium的基准测试使用zig cc编译器构建,支持wasm32-wasi。
  • 基准测试在Zen 2 CPU上运行,忽略了设置/拆卸时间和编译时间。
  • 多个WebAssembly运行时经过基准测试,包括wasm2c、wasmer、wasmtime等。
  • 测试结果显示不同运行时在性能上的差异,wasmedge和wasmer表现不一。
  • WebAssembly与本机代码相比,性能差距在2.32倍以内,但AES测试表现较差。
  • iwasm是性能最佳的WebAssembly运行时,适合嵌入式应用。
  • 基于LLVM/Cranelift/V8的运行时在性能上相似,但API稳定性各异。
  • JavaScriptCore的WebAssembly性能不如V8,但有改进空间。
  • wazero是Go应用程序的首选,具有零依赖和良好的集成性。
  • wasm2c是一个将WebAssembly转译为C的工具,性能表现优秀。
  • WebAssembly生态系统在过去两年中发生了显著变化,未来前景光明。
➡️

继续阅读