取决于执行JavaScript的运行时,可以通过你的JavaScript应用程序来访问平台相关的API。例如,如果您在浏览器中运行JavaScript,则您有一组Web APIs,Web应用程序可以调用它来控制Web浏览器/设备功能并访问DOM, CSSOM, WebGL, IndexedDB, Web Audio API等。
然而,WebAssembly模块无法访问任何平台API。一切都是由JavaScript调用的。如果您想访问WebAssembly模块中的某些平台特定的API,则必须通过JavaScript调用它。
例如,如果你想console.log,你必须通过JavaScript来调用它,而不是你的C ++代码。这些JavaScript调用的成本有所降低。
这并不总是如此。该规范将在未来为平台API提供wasm,并且您将能够在没有JavaScript的情况下发布您的应用程序。
Source maps当您精简JavaScript源代码时,您需要一种正确方式调试它。这就需要Source Maps。基本上, Source Maps 是一种将组合/缩小文件映射回未建立状态的方法。当您为生产而构建时,同时缩小和组合您的JavaScript文件,您将生成一个包含原始文件信息的源映射。当您在生成的JavaScript中查询某一行和列号时,可以在返回原始位置的源地图中执行查找。
WebAssembly目前不支持source maps,因为没有规范,但最终会支持(可能很快)。 当您在C ++代码中设置断点时,您将看到C ++代码而不是WebAssembly。
多线程JavaScript在单个线程上运行。有很多方法可以利用Event Loop并利用异步编程。
JavaScript也使用Web Workers,但他们有一个非常具体的用例 - 基本上,可能阻塞主UI线程的任何CPU密集计算都可以进入到Web Worker中来提高性能。但是,Web Workers无法访问DOM。
WebAssembly目前不支持多线程。但是,这可能是未来的事情。Wasm将更接近本地线程(例如C ++样式线程)。拥有“真实”的线程将在浏览器中创造出许多新的机会。当然,这将打开更多滥用可能性的大门。
可移植性如今,JavaScript几乎可以在任何地方运行,从浏览器到服务器端甚至嵌入式系统。
WebAssembly被设计为安全和便携。就像JavaScript一样。它将运行在支持主机的每个环境中(例如每个浏览器)。就像当年的Java的Applets,WebAssembly有相同的可移植性的愿景。
哪些场景更合适使用WA在WebAssembly的第一个版本中,主要关注CPU占用大的计算(例如处理数学)。想到的最主流的用途是游戏 - 那里有大量的像素操作。您可以使用您习惯的OpenGL在C ++ / Rust中编写您的应用程序,并将其编译为wasm。它会在浏览器中运行。 看看这个(在Firefox中运行)
。
这是 Unreal engine.。
另一种使用WebAssembly(性能方面)可能有意义的情况是实现一些库,这是一个CPU密集型工作。例如,一些图像处理。
如前所述,由于大多数处理步骤都是在编译期间提前完成的,因此wasm可以减少移动设备上的电池消耗(取决于引擎)。
将来,即使您实际上没有编写编译代码,您也可以使用WASM二进制文件。您可以在NPM中找到开始使用此方法的项目。
对于DOM操作和沉重的平台API使用,使用JavaScript确实很有意义,因为它不会增加额外的开销,并且具有本地提供的API。
在SessionStack中,我们不断增强JavaScript的性能,以编写高度优化且高效的代码。我们的解决方案需要提供超快的性能,因为我们不能阻碍客户应用的性能。将SessionStack集成到生产Web应用程序或网站后,它会开始记录所有内容:所有DOM更改,用户交互,JavaScript异常,堆栈跟踪,失败的网络请求和调试数据。所有这些都在您的生产环境中进行,而不会影响产品的任何UX和性能。我们需要大量优化我们的代码并尽可能使其异步。
不仅仅是库文件,当在SessionStack中重放用户回话时,我们会渲染用户浏览器中发生的所有事件,并且我们必须重构整个状态,允许您在会话时间线中来回跳转。因为没有更好的选择,为了做到这一点,我们大量使用了JavaScript提供的异步机会。
借助WebAssembly,我们将能够将一些最繁重的处理和渲染转换为更适合作业的语言,并将数据收集和DOM操作保留为JavaScript。
如果你想尝试下SessionStack,你可以免费开始。有一个免费的计划),每月提供1000个会话。
参考:
https://www.youtube.com/watch?v=6v4E6oksar0
https://www.youtube.com/watch?v=6Y3W94_8scw
此文已由腾讯云+社区在各渠道发布