Web 程序集二进制文件会比 JavaScript/TypeScript 包小吗?

Dav*_*lsh 6 webassembly

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

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

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

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

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

Col*_*inE 5

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

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

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

依次查看:

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

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

回复:3,正如您所承认的,WebAssembly 缺乏 DOM 访问权限——实际上是缺乏任何形式的 I/O。目前,您的“标准”WebAssembly 工具会生成“绑定”,为您的 WebAssembly 模块和一些 JavaScript“胶水”代码增加额外的权重。随着诸如界面类型提案之类的举措获得关注,这种情况可能会随着时间的推移而减少。

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

  • 感谢您花时间写此回复,这正是我想要的。 (3认同)