复习

本书的前四章基于这样的前提:异步编码模式给了你编写更高效代码的能力,这通常是一个非常重要的改进。但是异步行为也就能帮你这么多,因为它在基础上仍然使用一个单独的事件轮询线程。

所以在这一章我们涵盖了几种程序级别的机制来进一步提升性能。

Web Worker让你在一个分离的线程上运行一个JS文件(也就是程序),使用异步事件在线程之间传递消息。对于将长时间运行或资源密集型任务挂载到一个不同线程,从而让主UI线程保持相应来说,它们非常棒。

SIMD提议将CPU级别的并行数学操作映射到JavaScript API上来提供高性能数据并行操作,比如在大数据集合上进行数字处理。

最后,asm.js描述了一个JavaScript的小的子集,它回避了JS中不易优化的部分(比如垃圾回收与强制转换)并让JS引擎通过主动优化识别并运行这样的代码。asm.js可以手动编写,但是极其麻烦且易错,就像手动编写汇编语言。相反,asm.js的主要意图是作为一个从其他高度优化的程序语言交叉编译来的目标——例如,Emscripten(https://github.com/kripken/emscripten/wiki )可以将C/C++转译为JavaScript。

虽然在本章没有明确地提及,在很早以前的有关JavaScript的讨论中存在着更激进的想法,包括近似地直接多线程功能(不仅仅是隐藏在数据结构API后面)。无论这是否会明确地发生,还是我们将看到更多并行机制偷偷潜入JS,但是在JS中发生更多程序级别优化的未来是可以确定的。