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

标签 webassembly

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

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

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

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

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

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

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

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

  • 依次查看每个:

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

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

    Re:3,正如你所承认的,WebAssembly 缺乏 DOM 访问——事实上它缺乏任何形式的 I/O。目前,您的“标准”WebAssembly 工具会生成“绑定(bind)”,为您的 WebAssembly 模块和一些 JavaScript“胶水”代码增加额外的权重。随着像 interface types proposal 这样的举措,这可能会随着时间的推移而减少。获得牵引力。

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

    关于webassembly - Web 程序集二进制文件会小于 JavaScript/TypeScript 包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62274274/

    相关文章:

    c++ - Emscripten C++ 到带有类的 WASM - "error: undefined symbol"

    next.js - 如何将 WebAssembly rust 导入 NextJS?

    rust - FromWasmAbi 没有为 fn(SomeStruct) 实现,而 SomeStruct 是 #[wasm_bindgen]

    rust - 在浏览器中调试 WebAssembly 时如何查看 Rust 源代码?

    javascript - 如何使用 es6 导入加载 emscripten 生成的模块?

    c - 如何使用emcc编译longjmp?

    typescript - 使用 wasm 将模块导入并编译到 webpack 中

    javascript - WASM 可以用来检查 JS 方法的完整性吗?

    c# - Blazor HttpClient 卡在 GetAsync 中