1.诞生:
Ryan Dahl 2009年3月宣布创建基于v8的轻量级库,5月发布初版
最初基于linux系统,2011年7月发布windows版本
2012年交给IsaacZ.Schlueter(npm包管理者和作者)
2.为何选择javascript:
设计高性能web服务器的要点:事件驱动、非阻塞I/O
事件驱动:javascript做两件事:操作DOM和操作BOM,什么时候干?需要干的时候干。什么时候需要干?事件被触发的时候。即在事件被触发之前,所有的结构被静态的呈现出来,在事件触发之后,动态的行为发生,重新产生新的静态结构,事件与状态构成了事件驱动开发的基本要素。
非阻塞I/O:js单线程,通过回掉函数达到非阻塞的目的,非阻塞就是程序会一直按顺序执行,直到所有代码执行完毕,当遇到需要等待即异步函数的时候,直接跳过,等同步队列执行完,再来执行。
3.为什么叫node:
开始起名为web.js,单纯作为web服务器使用,随着发展,构建了服务器,客户端,命令行工具等,发展为一个强制不共享任何资源的单线程、单进程的系统,为构建大型分布式应用提供基础设施,目标是构建快速的可伸缩的网络应用平台。通过通信协议构建许多node,每个node进程都是构建这个网络应用的一个节点。
4.对javascript的意义:
Node与浏览器对比
Node与浏览器运行机理相同,是浏览器在协议栈另一边的倒影。Node打破了javascript只能在浏览器中运行的局面,前后端环境统一,降低了前后端转换的代价。
5.特点:
异步的I/O;同步io任务耗时是所有任务耗时之和,异步优势显而易见。
事件与回掉函数;事件编程轻量级,松耦合,只关注事物点。
单线程;不需要向多线程那样在意状态同步问题,不会有死锁存在
缺点:无法利用多核cpu,错误引起整个应用退出,
大量计算调用cpu会导致无法异步调用io(child_process)
跨平台:基于libuv实现跨平台