WASM提供了语言的编译目标,使它们能够被编译为可在浏览器内部执行。
当然,它目前缺少某些功能-例如从WASM直接进行DOM访问以及不使用JavaScript初始化二进制文件。
忽略这一点,今天的JavaScript满足了与浏览器兼容的编译目标的目标。但是,由于JavaScript本身是高级语言,因此输出时常会令人费解,并且输出的结果通常大于源代码本身。
假设在wasm中存在DOM访问的世界,将:
您可以想象,这不是一个可以肯定地回答的问题,但是,我可以使您更好地了解当前情况以及进展情况。
编译为WebAssembly模块的应用将具有以下组成部分:
依次查看:
关于(1),WebAssembly模块是节省尺寸的二进制格式。因此,它比最小的JavaScript表示的等效逻辑更紧凑(即更小)。
Re:2,WebAssembly缺少通用的运行时功能,例如(堆)内存管理和垃圾收集器。因此,运行时通常与应用程序逻辑一起提供。在某些情况下(Rust),此运行时非常轻巧,而在其他情况下(Blazor),则非常繁重。由于新的WebAssembly功能(垃圾收集,模块缓存)和更好的编译技术(提前编译),我们可能会看到这些运行时的权重随时间显着下降。
Re:3,您已经确认,WebAssembly缺少DOM访问-实际上,它缺少任何形式的I / O。目前,您的“标准” WebAssembly工具会生成“绑定”,从而增加WebAssembly模块和一些JavaScript“胶合”代码的重量。随着诸如interface types proposal之类的倡议获得越来越多的关注,这种情况可能会随着时间而减少。
所以为您回答问题,是的,我确实认为wasm模块将来会比其等效模块更紧凑。我还认为运行时将单独交付并进行缓存,但更重要的是,它将大大减小大小。