Cluster,把多核用起来

引子

众所周知,虽然Node的底层有一个IO线程池,但其应用层默认是单线程运行的,对于多核CPU环境来说,是一种资源的浪费。

所幸Node提供了child_process 模块,让开发者得以开多个进程,实现每个进程各自利用一个CPU,以实现多核的利用。

child_process 模块[……]

阅读全文

Bigpipe的启示

Bigpipe 是一种异步渲染方案,能有效提升页面加载速度。它也是Facebook前端渲染的主力,据说为网站提速近一倍。

Bigpipe是怎么做到的?

它的思路:将页面分割成多个部分(pagelet),先向用户输出没有数据的布局(框架),然后将每个部分逐步输出到前端,再最终渲染填充框架,[……]

阅读全文

元编程?

wind 源码的时候,脑子里蹦出一个词:MetaProgramming… 当然,我不是在说 wind 就是元编程了,只是觉得 JS 的动态性,很易于进行元编程。

我理解的元编程:用代码做为数据动态产生代码,用程序写程序。

JS 无需编译,所以有天然优势,运行时操作类或函数易如反掌。[……]

阅读全文

函数的arguments,注入及高阶函数

引子

在研究恶魔金字塔(Pyramid of Doom)的过程中,注意到 async 有这样的示例代码:

令人寻味的是这个回调函数callback。它不是调用者写的,而是由series()通过高阶函数的方式注入的。怎么注入的?答[……]

阅读全文

Pyramid of Doom (1)

引子

在学Node的时候,遇到了一个关于回调的问题:

有若干个进行资源调用的函数(比如它们共享一个mongoDB的连接),要确保在它们都执行完成后,执行一个资源销毁的函数,怎么做比较好?

Node提供的是一个纯异步的执行环境,决定了至少这样的代码是行不通的:
[crayon-67406c96[……]

阅读全文