2008年前端
RyanDahl的目标是建立一个易扩展、适用于现代Web应用通讯的服务器平台java
LinkedIn移动版From ROR to Node.js,base on Joyentnode
Paypal From Java to Node.jspython
Twitter的队列:收集须要保存从Tweets,传给负责写入的进程web
知乎的推送mongodb
网易express
阿里编程
各类创业团队后端
RESTFul API浏览器
实时通讯:如消息推送等
高并发
I/O阻塞
生于社区
社区推动
Github
国内
以NPM为中心
基础服务提供商的支持
周边服务提供商的支持
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测试框架
Joyent的目标:兼容性、性能
社区:New features
IO.js: A friendly fork of Node.js with an open governance model
现状: IO.js的发展速度成为了有史以来成长最快的开源项目
关系:全面兼容,两者依然有可能并存
1995年
JavaScript诞生:Branden Eich,10天时间
JavaScript的目标:业余人士,浏览器上的脚本语言
1996-08,包含JScript的IE3.0发布
1996-11,Netscape将JavaScript提交给ECMA
1997-06,ECMA-262发布
JavaScript = ECMAScript + DOM + BOM
2004-04-01,Gmail发布
2005-0208,Google Maps发布,后又推出街景服务
2008-09-02,Google Chrome发布,一同面世的还有V8
DOM操做:jQuery/ExtJS/YUI
结构化前端框架:AngularJS/backbone.js/Ember.js
Rhino引擎
javax.script API
原生支持异步
历史包袱
开发门槛
{fib:JS}
前端:AngularJS、BACKBONE.JS、emben
后端:Node.js、{fib:JS}
移动端:PhoneGap、ReactNative
环境配置简单,只须要安装Node.js便可
注重约定
项目所须要扩展、插件、资源相对独立,不易冲突
主要观点:根据当前出现的事件,调动资源进行相关的处理
回调函数
事件监听
订阅/发布
单个操做的性能并不优于其它解决方案
经过优化资源调配和I/O操做来实现高效
其它语言对IO的处理:
PHP:原地等待,开多进程
C/C++:利用线程,程序要本身维护线程和资源的状态
Google V8 是单线程的,因此与Node.js一样是单线程的。为了更好地利用CPU资源,能够利用子进程和多进程:
子进程:Node.js的child_process模块
多进程:PM2等等第三方工具
大量采用匿名函数,使得抛出的异常不易阅读
try/catch限于同步代码,使得异常捕获较为复杂
单线程:可靠性
不适合CPU密集型的场景
回调的代码习惯影响阅读
Node.js的应用领域
Node.js的特色与缺点