《深入浅出Node.js》学习笔记——(一)Node简介

1.1 Node的诞生历程

20095月,由Ryan DahlGithub上发布最初版本

20117月,Node在微软的支持下发布了Windows版本

201111月,Node超越Ruby onRails,成为Github上关注度最高的项目(随后被Bootstrap项目超越,目前仍居第二)

20121月底,Ryan Dahl将掌门人身份转交给Isaac Z. Schlueter

⑤此后的发布计划主要集中在性能提升上

 

1.2 Node的命名与起源

Nodejs, NodeJS,Node.js, Node是一回事

   1.2.1为什么是JavaScript

   目标:写一个基于事件驱动,非阻塞I/OWeb服务器

   结论:①C开发门槛高 Ryan DahlHasKell不熟

                Lua自身含有很多阻塞I/O Ruby虚拟机的性能不够好

  JavaScript的优势:

   ①高性能 ②符合事件驱动 ③没有历史包袱

   1.2.2为什么叫Node

   易于扩展达成构建大型网络应用的目的,每个Node进程都构成这个网络应用中的一个节点。

 

1.3 NodeJavaScript带来的意义


                                                                                              Chrome浏览器和Node的组件构成

 

浏览器通过事件驱动来服务界面上的交互

Node通过事件驱动来服务I/O

 

Node中,JavaScript可以

①随心所欲的访问本地文件

②搭建WebSocket服务器端

③连接数据库

④如Web Workers一样玩转多进程

 

node-webkitNode中的事件循环和WebKit的事件循环融合在一起

桌面应用程序的开发可以完全通过HTML,CSS,JavaScript完成

 

1.4 Node的特点

保留了前端JavaScript中的接口,没有改写语言本身的任何特性

依旧基于作用域和原型链

1.4.1 异步I/O


                                                                                     经典的Ajax调用

 


                                                                                                         经典的异步调用

 

异步的意义:

可进行并行I/O操作,无需等待之前的I/O调用结束,极大地提升效率

 

1.4.2 事件与回调函数

事件的编程方式的优势:轻量级,松耦合,只关注事务点

 

1.4.3单线程

Node保持了单线程的特点。在Node中,JavaScript与其余线程无法共享任何状态。

Advantage:

①不用在意状态的同步问题

②没有死锁存在

③没有线程上下文交换所带来的性能上的开销

Disadvantage:

①无法利用多核CPU

②错误会引起整个应用退出,应用的健壮性值得考验

③大量计算占用CPU导致无法继续调用异步I/O

 

在浏览器中,JavaScriptUI共用一个线程,JavaScript长时间执行会导致UI渲染和响应被中断;

Node中,长时间CPU占用会导致后续异步I/O发不出调用,已完成的异步I/O的回调函数也会得不到及时执行

 

解决方案:

①最早是GoogleGears,它启用一个完全独立的进程,将需要计算的程序发送给这个进程,结果得出后,通过事件将结果传递回来

HTML5定制的Web Workers标准,创建工作线程进行计算,通过消息传递的方式来传递运行结果,也使得工作线程不能访问到主线程中的UI

Node采用与Web Workers相同的思路解决问题:child_process

通过Master-Worker的管理方式,来管理各个工作进程,以达到更高的健壮性

 

1.4.4 跨平台

起初Node只可以在Linux平台上运行,跨Windows平台需要通过Cygwin或者MinGW

后期在v0.6.0版本时基于libuv实现跨平台


                     Node基于libuv实现跨平台的架构示意图

 

Node的第三方C++模块也可以借助libuv实现跨平台

 

1.5 Node的应用场景

1.5.1 I/O密集型

Node面向网络且擅长并行I/O,能够有效地组织更多的硬件资源,提供更多好的服务,资源占用少

 

1.5.2 是否不擅长CPU密集型业务


V8深度性能优化

 

合理调度,充分利用CPU的两种方法:

①编写C/C++扩展的方式

②通过子进程的方式

 

1.5.3与遗留系统和平共处

互相结合,取长补短

 

1.5.4 分布式应用

阿里巴巴数据平台

 

1.6 Node的使用者

根据倚重点分类:

①前后端编程语言环境统一。

雅虎

Node带来的高性能I/O用于实时应用。

Voxer,腾讯朋友网,花瓣网,蘑菇街等

③并行I/O使得使用者可以更高效地利用分布式环境。

阿里巴巴,eBay

④云计算平台提供Node支持。

微软Azure,阿里云,百度,Joyent

⑤游戏开发领域。

网易

⑥工具类应用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值