简述
本章将列出 WebAssembly 和 Javascript 的比较。
Javascript 是一种语言,我们在浏览器中使用了很多。现在,随着 WebAssembly 的发布,我们也可以在浏览器中使用 WebAssembly。
WebAssembly 出现的原因不是要取代 javascript,而是要处理一些 javascript 难以处理的事情。
例如
图像识别、CAD 应用程序、实时视频增强、VR 和增强现实、音乐应用程序、科学可视化和模拟、游戏、图像/视频编辑等任务很难用 javascript 完成。
使用现在可以编译为 WebAssembly 的 C/C++、Rust 等高级语言,很容易完成上述任务。WebAssembly 生成易于在浏览器中执行的二进制代码。
所以这里是 Javascript 和 WebAssembly 之间的比较列表。
参数 |
Javascript |
WebAssembly |
编码
|
您可以轻松地用 Javascript 编写代码。编写的代码是人类可读的并保存为 .js。在浏览器中使用时,您需要使用 <script> 标签。
|
代码可以在 WebAssembly 中以文本格式编写,并保存为 .wat。很难以 .wat 格式编写代码。最好从其他高级语言编译代码,而不是从头开始编写 .wat。
您无法在浏览器中执行 .wat 文件,必须使用可用的编译器或在线工具转换为 .wasm。
|
执行
|
在浏览器中使用时用 javascript 编写的代码必须下载、解析、编译和优化。
|
我们有 .wasm 格式的 WebAssembly 代码已经编译并采用二进制格式。
|
内存管理
|
Javascript在创建变量时分配内存,在不使用时释放内存并添加到垃圾收集中。
|
WebAssembly 中的内存是一个保存数据的数组缓冲区。您可以使用 Javascript API WebAssembly.memory() 分配内存。
WebAssembly 内存以数组格式存储,即易于理解和执行执行的平面内存模型。
WebAssembly 中内存模型的缺点是 -
|
加载时间和性能
|
对于 javascript,当在浏览器中调用时,必须下载并解析 javascript 文件。稍后,解析器将源代码转换为 javascript 引擎在浏览器中执行代码的字节码。
Javascript 引擎非常强大,因此与 WebAssembly 相比,javascript 的加载时间和性能非常快。
|
WebAssembly 的一个最重要目标是比 JavaScript 更快。从高级语言生成的 Wasm 代码体积更小,因此加载时间更快。
但是,像 GO 这样的语言在编译为 wasm 时会为一小段代码生成大文件。
WebAssembly 的设计使其编译速度更快,并且可以在所有主流浏览器上运行。与 javascript 相比,WebAssembly 仍然需要在性能方面进行大量改进。
|
调试
|
Javascript 是人类可读的,可以轻松调试。在浏览器中为您的 javascript 代码添加断点可让您轻松调试代码。
|
WebAssembly 以文本格式提供代码,可读但仍然很难调试。Firefox 确实允许您在浏览器中查看 .wat 格式的 wasm 代码。
您不能在 .wat 中添加断点,这将在未来提供。
|
浏览器支持
|
Javascript 在所有浏览器中运行良好。
|
所有主要的 Web 浏览器都支持 WebAssembly。
|