Web 程序集二进制文件会小于 JavaScript/TypeScript 包吗?
Will web assembly binaries be smaller than JavaScript/TypeScript bundles?
WASM 为语言提供了一个编译目标,使它们能够被编译为可以在浏览器中执行。
当然,它目前缺少某些功能 - 例如从 WASM 直接 DOM 访问和不使用 JavaScript 初始化二进制文件。
忽略这一点,Java今天的脚本满足了浏览器兼容编译目标的目标。然而,输出 Java脚本通常会很复杂,因为它本身就是一种高级语言,并且通常会导致输出大于源代码本身。
假设在 wasm 内部存在 DOM 访问权限的世界,将:
- 排除语言运行时,Java编译为 WASM 的脚本或 TypeScript 会导致二进制大小小于使用 Webpack 生成的等效 Java脚本包吗?
- 运行时会单独共享和交付吗?请参阅 Java、SilverLight、Flash、Shockwave
你可以想象,这不是一个可以肯定回答的问题,但是,我可以让你更好地了解当前的情况和事情的发展方向。
编译为 WebAssembly 模块的应用程序将包含以下组件:
- 应用逻辑本身
- (可选)一个运行时
- (可选)主机 API 集成
依次看:
关于 (1),WebAssembly 模块是一种节省大小的二进制格式。出于这个原因,它比 minified JavaScript.
表示的等效逻辑更紧凑(即更小)
回复:2,WebAssembly 缺少常见的运行时功能,例如(堆)内存管理和垃圾收集器。出于这个原因,运行时通常与您的应用程序逻辑一起提供。在某些情况下(Rust)这个运行时非常轻量级,而在其他情况下(Blazor)它非常重。由于新的 WebAssembly 功能(垃圾收集、模块缓存)和更好的编译技术(提前编译),我们可能会看到这些运行时的权重随着时间的推移显着下降。
Re:3,正如您所承认的,WebAssembly 缺少 DOM 访问权限——事实上缺少任何形式的 I/O。目前,您的 'standard' WebAssembly 工具会生成 'bindings',这会为您的 WebAssembly 模块和一些 JavaScript 'glue' 代码增加额外的重量。随着 interface types proposal 等举措获得关注,这种情况可能会随着时间的推移而减少。
所以回答你的问题,是的,我确实认为 wasm 模块将来会比它们的等效模块更紧凑。我还认为运行时将单独交付并缓存,但更重要的是,这将显着减少大小。
WASM 为语言提供了一个编译目标,使它们能够被编译为可以在浏览器中执行。
当然,它目前缺少某些功能 - 例如从 WASM 直接 DOM 访问和不使用 JavaScript 初始化二进制文件。
忽略这一点,Java今天的脚本满足了浏览器兼容编译目标的目标。然而,输出 Java脚本通常会很复杂,因为它本身就是一种高级语言,并且通常会导致输出大于源代码本身。
假设在 wasm 内部存在 DOM 访问权限的世界,将:
- 排除语言运行时,Java编译为 WASM 的脚本或 TypeScript 会导致二进制大小小于使用 Webpack 生成的等效 Java脚本包吗?
- 运行时会单独共享和交付吗?请参阅 Java、SilverLight、Flash、Shockwave
你可以想象,这不是一个可以肯定回答的问题,但是,我可以让你更好地了解当前的情况和事情的发展方向。
编译为 WebAssembly 模块的应用程序将包含以下组件:
- 应用逻辑本身
- (可选)一个运行时
- (可选)主机 API 集成
依次看:
关于 (1),WebAssembly 模块是一种节省大小的二进制格式。出于这个原因,它比 minified JavaScript.
表示的等效逻辑更紧凑(即更小)回复:2,WebAssembly 缺少常见的运行时功能,例如(堆)内存管理和垃圾收集器。出于这个原因,运行时通常与您的应用程序逻辑一起提供。在某些情况下(Rust)这个运行时非常轻量级,而在其他情况下(Blazor)它非常重。由于新的 WebAssembly 功能(垃圾收集、模块缓存)和更好的编译技术(提前编译),我们可能会看到这些运行时的权重随着时间的推移显着下降。
Re:3,正如您所承认的,WebAssembly 缺少 DOM 访问权限——事实上缺少任何形式的 I/O。目前,您的 'standard' WebAssembly 工具会生成 'bindings',这会为您的 WebAssembly 模块和一些 JavaScript 'glue' 代码增加额外的重量。随着 interface types proposal 等举措获得关注,这种情况可能会随着时间的推移而减少。
所以回答你的问题,是的,我确实认为 wasm 模块将来会比它们的等效模块更紧凑。我还认为运行时将单独交付并缓存,但更重要的是,这将显着减少大小。