如何使用 WebAssembly 和 JS构建高性能应用程序( 三 )

例如 , 如果你无法找到实现某些功能的 JavaScript 库 , 则必须从头开始编写并实现自己的库 。 但如果你可以找到实现相同功能 , 但使用不同语言编写的库 , 则可以使用 WebAssembly 的能力在 Web 应用程序中运行它 。 这是一项重大突破 , 因为从开发人员的角度来看 , 它将节省大量时间 。
Squoosh 应用使用 WebAssembly 来实现其 QR 和图像检测功能 。 这样一来 , 即使在较旧的浏览器上 , 它们也能以接近原生的速度支持这些功能 。 此外 , eBay 将其原生应用程序的 C++ 库编译为 WebAssembly , 从而在 Web 应用程序中实现了条形码扫描功能 。

  • 无需修改代码 , 就能在 Web 上运行用 C、C++、Rust 等语言编写的完全原生应用程序 , 性能表现也接近原生水平 。
诸如 AutoCAD、QT 甚至谷歌地球之类的应用程序都可以在几乎不修改代码库的情况下以接近原生的性能运行在 Web 上 , 多亏了 Web Assembly 的强大力量 。
  • 即使你找到了用 JavaScript 编写的类似库 , 也可以使用以 C、C++ 或 Rust 等语言编写的库 , 因为 WebAssembly 代码速度飞快 , 并能提供更好的质量 。
谷歌团队将来自 C 和 C++ 等不同语言的编码器编译到了他们的 Squoosh 应用中 , 并替换掉了常规的编解码器(如 JPEG -> MozJPEG) 。 这些替代品缩小了文件体积 , 而不会牺牲图像的视觉质量 。
支持的语言WebAssembly 支持不仅限于 C、C++ 和 Rust 。 许多开发人员也在努力纳入对其他语言的支持 。 以下是当前支持的语言列表 。
  • C/C++
  • Rust
  • AssemblyScript(类似 TypeScript 的语法)
  • C#
  • F#
  • Go
  • Kotlin
  • Swift
  • D
  • Pascal
  • Zig
批评WebAssembly 允许在已编译的二进制文件中执行 , 因此带来了许多安全性质疑 。 甚至无需什么 trace 也可以利用这些漏洞 , 而且它们确实很难发现 。 尽管 WebAssembly 也有自己的安全特性 , 但我个人认为这方面仍需进一步改进 。 因为引入了那么多新功能 , 防病毒工具和 URL 过滤之类的传统防护技术根本无法提供全面保护 。 这意味着常规浏览器在未来会更加脆弱 。
关于这些问题的更多信息可以参考以下文章 。
结论有人猜测 WebAssembly 将取代 JavaScript , 但我必须说这是完全错误的 。 创建 WebAssembly 是为了与 JavaScript 共存 , 而不是替代它 。 此外 , 调试 JavaScript 比 WebAssembly 容易一些 , 并且在 Wasm 中没有 JavaScript 的那种自由气氛 。
大家都对它寄予厚望 , 可以肯定地说 WebAssembly 能够为一系列应用铺平道路 , 惊艳世人 。
“没人能肯定地说这些性能改进可以催生怎样的应用 。 但以史为鉴 , 我们可以对此满怀期待” ——Lin Clark
原文链接:
延伸阅读:
20个大前端必知领域之「WebAssembly」-InfoQ
22个必知编程语言之「WebAssembly」-InfoQ
Next.js 9.5 正式发布:支持 Webpack 5-InfoQ
关注我并转发此篇文章 , 私信我“领取资料” , 即可免费获得InfoQ价值4999元迷你书 , 点击文末「了解更多」 , 即可移步InfoQ官网 , 获取最新资讯~