小结
异步编码模式使我们能够编写更高效的代码,通常能够带来很大的性能改进。但是,异步编程只能让你走那么远,因为它本质上还是绑定在一个单事件循环线程上。
Web Worker 让你可以在独立的线程运行一个 JavaScript 文件(即程序),使用异步事件在线程之间传递消息。它们非常适用于把长时间的或资源密集型任务卸载到不同的线程中,以提高主 UI 线程的响应性。
SIMD 打算把 CPU 级的并行数学运算映射到 JavaScript API,以获得高性能的数据并行运算,比如在大数据集上的数字处理。
最后,asm.js 描述了 JavaScript 的一个很小的子集,它避免了 JavaScript 难以优化的部分(比如垃圾收集和强制类型转换),并且让 JavaScript 引擎识别并通过激进的优化运行这样的代码。可以手工编写 asm.js ,但是会极端费力并且容易出错,类似于手写汇编语言(这也是其名字的由来)。实际上,asm.js 也是高度优化的程序语言交叉编译的一个很好的目标,比如 Emscripten 把 C/C++ 转换成 JavaScript (https://github.com/kripken/emscripten/wiki)。
SIMD
单指令多数据(SIMD)是一种数据并行(data parallelism) 方式,与 Web Worker 的任务并行 (task parallelism) 相对,因为这里的重点实际上不再是把程序逻辑分成并行的块,而是并行处理数据的多个位。