1、认识 Node.js
诞生、发展、应用现状、生态圈等方面
1.1、
2008年
RyanDahl的目标是创建一个易扩展、适用于现代Web应用通信的服务器平台
1.2、国内外的应用情况
LinkedIn移动版From ROR to Node.js,base on Joyent
Paypal From Java to Node.js
Twitter的队列:收集需要保存从Tweets,传给负责写入的进程
知乎的推送
网易
阿里
各种创业团队
1.3、主要应用领域
RESTFul API
实时通信:如消息推送等
高并发
I/O阻塞
1.4、社区
生于社区
社区推进
Github
国内
1.5、生态圈
以NPM为中心
基础服务提供商的支持
周边服务提供商的支持
1.6、知名度较高的Node.js开源项目
express(web服务器框架)
PM2(Node本来是单进程,PM2实现和管理多进程)
jade(优秀的模板引擎,还支持其他一些语言)
coffeeScript(JavaScript的转义语言(类似于python),相对JS它更加简洁、具有更好的高毒性,coffeescript的代码也可以转换为JS的代码,有很多js代码和Node.js代码是用coffeescript完成的)
itom(文本编译器,主要使用coffeescript完成,他的文件系统子进程管理以及用于调试和测试的服务器部分都是使用Node.js来支撑的)
socket.io是一个实时通信框架(应用他可以在Node.js中方便地使用websocket进行通信)
Pomelo是一个网易公司推出的一个策略游戏服务器端框架,mongoose是Node.js中使用mongodb的扩展、mocha是功能强大的Nnode.js测试框架
1.7、IO.js
Joyent的目标:兼容性、性能
社区:New features
IO.js: A friendly fork of Node.js with an open governance model
现状: IO.js的发展速度成为了有史以来成长最快的开源项目
关系:全面兼容,二者依然有可能并存
2、Node.js 与 JavaScript 的关系
诞生、发展、2004年以后的新浪潮、服务器端运行 JavaScript 的解决方案,以及 Node.js 与 JavaScript 之间的关系
2.1、JavaScript的诞生
1995年
JavaScript诞生:Branden Eich,10天时间
JavaScript的目标:业余人士,浏览器上的脚本语言
2.2、ECMAScript与DOM/BOM
1996-08,包含JScript的IE3.0发布
1996-11,Netscape将JavaScript提交给ECMA
1997-06,ECMA-262发布
JavaScript = ECMAScript + DOM + BOM
2.3、Gmai与GoogleV8
2004-04-01,Gmail发布
2005-0208,Google Maps发布,后又推出街景服务
2008-09-02,Google Chrome发布,一同面世的还有V8
2.4、新浪潮中的前端框架
DOM操作:jQuery/ExtJS/YUI
结构化前端框架:AngularJS/backbone.js/Ember.js
2.5、在服务器上运行JavaScript的尝试
Rhino引擎
javax.script API
2.6、Node为何选择了JavaScript
原生支持异步
历史包袱
开发门槛
2.7、Node.js与JavaScript的关系 -- 另一种实现:Fibjs
{fib:JS}
2.8、全栈语言:JavaScript
前端:AngularJS、BACKBONE.JS、emben
后端:Node.js、{fib:JS}
移动端:PhoneGap、ReactNative
3、Node.js 的特点
优点与缺点
3.1、部署简单方便
环境配置简单,只需要安装Node.js即可
注重约定
项目所需要扩展、插件、资源相对独立,不易冲突
3.2、事件驱动
主要观点:根据当前出现的事件,调动资源进行相关的处理
3.3、异步编程
3.4、异步编程
异步的实现方式
回调函数
事件监听
订阅/发布
3.5、高效与性能
单个操作的性能并不优于其它解决方案
通过优化资源调配和I/O操作来实现高效
其它语言对IO的处理:
PHP:原地等待,开多进程
C/C++:利用线程,程序要自己维护线程和资源的状态
3.6、单线程与多线程
Google V8 是单线程的,所以与Node.js同样是单线程的。为了更好地利用CPU资源,可以利用子进程和多进程:
子进程:Node.js的child_process模块
多进程:PM2等等第三方工具
3.7、Node.js的缺点
大量采用匿名函数,使得抛出的异常不易阅读
try/catch限于同步代码,使得异常捕获较为复杂
单线程:可靠性
不适合CPU密集型的场景
回调的代码习惯影响阅读
3.8、你需要着重了解以下知识
Node.js的应用领域
Node.js的特点与缺点