Web 汇编二进制文件会比 JavaScript/TypeScript bundle小吗?



WASM为语言提供了一个编译目标,使它们能够被编译,例如在浏览器中可执行。

当然,它目前缺乏某些功能 - 例如从WASM直接访问DOM和在不使用JavaScript的情况下初始化二进制文件。

忽略这一点,今天的JavaScript满足了浏览器兼容编译目标的目标。 但是,输出 JavaScript 通常会很复杂,因为它本身是一种高级语言,并且通常会导致输出大于源代码本身。

假设一个 DOM 访问存在于 wasm 中的世界,将:

  • 排除语言运行时,编译为 WASM 的 JavaScript 或 TypeScript 是否会导致二进制大小小于使用 Webpack 生成的等效 JavaScript 包?
  • 运行时是否会单独共享和交付?参见Java,SilverLight,Flash,Shockwave

可以想象,这不是一个可以肯定回答的问题,但是,我可以让您更好地了解当前的情况以及事情的发展方向。

编译为 WebAssembly 模块的应用程序将具有以下组件部分:

  1. 应用逻辑本身
  2. (可选(运行时
  3. (可选(主机 API 集成

依次看:

关于(1(,WebAssembly模块是一种大小高效的二进制格式。出于这个原因,它比缩小的JavaScript表示的等效逻辑更紧凑(即更小(。

Re:2,WebAssembly缺少常见的运行时功能,如(堆(内存管理和垃圾收集器。因此,运行时通常与应用程序逻辑一起提供。在某些情况下(Rust(,此运行时非常轻量级,而在其他情况下(Blazor(,它非常重。我们可能会看到这些运行时的权重随着时间的推移而显着减少,这是由于新的WebAssembly功能(垃圾收集,模块缓存(和更好的编译技术(提前编译(。

Re:3,正如你承认的,WebAssembly 缺乏 DOM 访问 - 实际上缺少任何形式的 I/O。目前,您的"标准"WebAssembly工具会生成"绑定",从而为您的WebAssembly模块和一些JavaScript"胶水"代码增加额外的权重。随着接口类型提案等举措的吸引力,这可能会随着时间的推移而减少。

所以要回答你的问题,是的,我确实认为wasm模块将来会比它们的同类模块更紧凑。我还认为运行时将单独交付并缓存,但更重要的是,这将显着减小大小。

最新更新