这个系列的前三本书聚焦于这门语言的核心技术,但是第四本书稍稍开出一个分支来探讨在这门语言技术之上的管理异步编程的模式。异步不仅对于性能和我们的应用程序很关键,而且它日渐成为改进可写性和可维护性的关键因素。

    这本书从搞清楚许多令人困惑的术语和概念开始,比如“异步”,“并行”和“并发”。而且深入讲解了这些东西如何适用和不适用于JS。

    然后我们继续检视作为开启异步的主要方法:回调。但我们很快就会看到,对于现代异步编程的需求来说,单靠回调自身是远远不够的。我们将找出仅使用回调编码的两种主要的不足之处:控制反转(IoC)信任丢失和缺乏线性的可推理性。

    为了解决这两种主要的不足,ES6引入了两种新的机制(实际上也是模式):promise 和 generator。

    Prmise是一个“未来值”的一种与时间无关的包装,它让你推理并组合这些未来值而不必关心它们是否已经准备好。另外,它们通过将回调沿着一个可信赖和可组装的promise机制传递,有效地解决了IoC信任问题。

    Generator给JS函数引入了一种新的执行模式,generator可以在yield点被暂停而稍后异步地被继续。这种“暂停-继续”的能力让generator在幕后异步地被处理,使看起来同步,顺序执行的代码成为可能。如此,我们就解决了回调的非线性,非本地跳转的困惑,并因此使我们的异步代码看起来是更容易推理的同步代码。

    但是,是promise与generator的组合给了我们JavaScript中最有效的异步代码模式。事实上,在即将到来的ES7与之后的版本中,大多数精巧的异步性肯定会建立在这个基础之上。为了认真地在一个异步的世界中高效地编程,你将需要对promise与generator的组合十分适应。

    如果promise和generator是关于表达一些模式,这些模式让你的程序更加并发地运行,而因此在更短的时间内完成更多的处理,那么JS在性能优化上就拥有许多其他的方面值得探索。

    第五章钻研的话题是使用Web Worker的程序并行性和使用SIMD的数据并行性,以及像ASM.js这样的底层优化技术。第六章从正确的基准分析技术的角度来观察性能优化,包括什么样的性能值得关心而什么应当忽略。

    高效地编写JavaScript意味着编写的代码可以突破这种限制壁垒:在范围广泛的浏览器和其他环境中动态运行。这需要我们进行更多复杂的详细计划与努力,才能使一个程序从“可以工作”到“工作得很好”。

    给你编写合理且高效的JavaScript代码所需的全部工具与技能,异步与性能 就是为此而设计的。