WASM 为语言提供了一个编译目标,使它们能够被编译以便在浏览器中执行。
当然,它目前缺少某些功能——例如从 WASM 直接访问 DOM 以及在不使用 JavaScript 的情况下初始化二进制文件。
忽略这一点,今天的 JavaScript 满足了浏览器兼容编译目标的目标。但是,由于 JavaScript 本身是一种高级语言,输出的 JavaScript 通常会很复杂,并且通常会导致输出大于源代码本身。
假设在 wasm 中存在 DOM 访问的世界,将:
最佳答案
可以想象,这不是一个可以肯定回答的问题,但是,我可以让您更好地了解当前的情况以及事情的发展方向。
编译为 WebAssembly 模块的应用程序将具有以下组件部分:
依次查看每个:
关于 (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/