对于NodeJS来讲传统程序员比较陌生,初看觉得是什么前端框架,其实并非前端框架。传统的Javascript只能跑在浏览器中,可是一位叫Ryan Dahl的开发者灵感一来,为何Javascript不能运行在服务端呢?而后通过思考后他决定将Javascript带到后端,在苦苦寻觅中发现谷歌的V8引擎来运行Javascript是很高效的,可是仅仅有浏览器端Javascript是不能构建出强大后端应用的,因此他移除了没必要要的浏览器端的特征后又为Javascript添加入了更强大的API,这个API就是后来推荐的CommonJS标准。CommonJS包含操做IO、DataBase、OS相关API(图1-2;摘自《Node.js 开发指南》)。 前端
Ryan Dahl思考如今的IT系统经常遇到C10K问题,为何会出现这个问题呢?是由于传统的后端业务经常以线程为单位进行执行的,而线程大量建立会致使系统资源不足,以及在IO操做时CPU的闲置引起的开销。Ryan Dahl发现JS的异步-回调模式很好的解决IO操做的致使CPU闲置开销问题,当在执行IO操做时CPU能够继续执行其余业务,IO操做完成后回调继续由CPU接着执行。从而保证CPU的资源不浪费(图1-1;摘自《Node.js 开发指南》)。 程序员
Ryan Dahl所设计的NodeJS是一个单线程异步IO模型执行机制的服务端程序。IO操做将会交给专用的工做线程处理,回调的方法将插入主线程队列,由于NodeJS是单线程模型,面向CPU操做的业务都会排队在主线程中执行。这也偏偏是NodeJS的弱点,若是CPU操做的业务时间太长,将会影响其余业务,不过还好目前已经有解决方法了,例如:“threads-a-gogo”模块。NodeJS不知道为何没法使用TryCatch捕获回调内部异常,这问题将致使程序调试时的复杂性,同时会引起整个崩溃重启,不过目前第三方已经实现捕捉内部异常,例如:“domain”模块,但仍是没法避免崩溃重启。NodeJS的中可能出现过多的回调函数也是一个头痛的问题,这样会致使代码的可维护性降低,不过目前“Promise”模块已经基本解决嵌套带来的阅读问题,“Promise”经过一套巧妙的回调接口可以平行性进行接连操做,防范过多的嵌套问题,而“Promise”的思想也开始影响AJAX相关的前端库。Ryan Dahl在设计NodeJS引入NPM方便社区协做,使得NodeJS的功能的迭代速度进一步加快。同时NodeJS自身集成了Server方便敏捷开发和部署。NodeJS还能够作其余软件,不只局限于Web端(图3-1;摘自《Node.js 开发指南》)。 后端
虽然NodeJS目前优势明显,缺点也明显,可是他偏偏有PHP没法比拟的优点。尤为是在高并发IO类业务时体现的淋淋尽致。若是NodeJS能解决单线程与异常捕捉与异步业务的开发的门槛和维护复杂度等问题。相信不久未来会是替代PHP的最佳良品。 浏览器
以上截止仅供发文时总结,随着NodeJs版本快速迭代会有很大变化。前端框架