《深入浅出Node.js》第1章 Node简介
@by Ruth92(转载请注明出处)
第1章 Node简介
一、Node的起源
高性能Web服务器的要点:事件驱动、非阻塞I/O。
选择JavaScript的原因:高性能、符合事件驱动、没有历史包袱。
JavaScript的开发门槛低;JavaScritp无历史包袱,导入非阻塞I/O库没有额外阻力;JavaScript在浏览器中有广泛的事件驱动方面的应用,满足基于事件驱动的需求;- Chrome 浏览器的
JavaScript引擎 V8 性能最佳。
Node与浏览器的对比:

除了 HTML、WebKit 和显卡这些 UI 相关技术没有支持外,Node 的结构与 Chrome 十分相似。
它们都是基于事件驱动的异步架构,浏览器通过事件驱动来服务界面上的交互,Node 通过事件驱动来服务 I/O。
二、Node的特点
1) 异步 I/O
- 在 Node 中,我们可以从语言层面很自然地进行并行 I/O 操作。
- 每个调用之间无需等待之前的 I/O 调用结束。在编程模型上可以极大提升效率。
2) 事件与回调函数
- 回调函数式最好的接受异步调用返回数据的方式。
3) 单线程
Node 保持了 JavaScritp 在浏览器中单线程的特点。并且在 Node 中,JavaScript 与其余线程是无法共享任何状态的。
- 单线程的最大好处:
- 不用像多线程编程那样处处在意状态的同步问题,这里没有死锁的存在,也没有线程上下文交换所带来的性能上的开销。
- 单线程的弱点:
- 无法利用多核 CPU;
- 错误会引起整个应用退出,应用的健壮性值得考验;
- 大量计算占用 CPU 导致无法继续调用异步 I/O。
浏览器中 JavaScript 与 UI 共用一个线程,JavaScript 长时间执行会导致 UI 的渲染和响应被中断。
4) 跨平台

目前,libuv 已经成为许多系统实现跨平台的基础组件。
三、Node 的应用场景
1) I/O 密集型
I/O 密集的优势:主要在于 Node 利用事件循环的处理能力,而不是启动每一个线程为每一个请求服务,资源占用极少。
2) CPU 密集型:
挑战:由于 JavaScript 单线程的原因,如果有长时间运行的计算(比如大循环),将会导致 CPU 时间片不能释放,使得后续 I/O 无法发起。
是否适用?——>只需做到合理调度或实现 C/C++ 扩展等
4) 与遗留系统的和平共处
5) 分布式应用:高效并行 I/O
《深入浅出Node.js》第1章 Node简介的更多相关文章
- node.js入门系列(一)--Node.js简介
什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一 ...
- node.js系列笔记之node.js初识《一》
node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...
- Node.js的安装以及Node.js的模块管理
索引: Node.js的安装以及Node.js的模块管理Node.js开发环境搭建以及对ES6的支持Node.js构建Vue.js项目Vue.js单文件组件的开发基于Vue.js的UI组件(Eleme ...
- Installing Node.js via package manager | Node.js
Installing Node.js via package manager | Node.js i386 (32-bit)
- Node.js学习笔记(1) - Node.js简介
近期在看一些Node.js的知识,看完后觉得,一些前面的东西忘记了,于是整理一下,方便自己查阅,也希望对学习Node.js的朋友有些帮助: 当然以下只是我个人的观点和理解,不喜勿喷,也望大神指教. 一 ...
- node.js零基础详细教程(4):node.js事件机制、node异步IO操作
第四章 建议学习时间3小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- Node.js入门教程:Node.js如何安装配置并部署第一个网站
前言:作为一个资深的前端开发人员,不懂的Node.js 那你绝对是不能跟别人说你是资深的前端程序猿滴! 今天洋哥就来和大家一起学习被大牛称之为前端必学的技能之一Node! 那么Node到底是什么呢? ...
- node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用提高nodejs调试效率
在开发或调试Node.js应用程序的时候,当你修改js文件后,总是要按下CTRL+C终止程序,然后再重新启动,即使是修改一点小小的参数,也 总是要不断地重复这几个很烦人的操作.这是因为Node.js ...
- Node.js权威指南 (10) - Node.js中的错误处理与断言处理
10.1 使用domain模块处理错误 / 272 10.1.1 domain模块概述 / 272 10.1.2 创建并使用Domain对象 / 274 10.1.3 隐式绑定与显式绑定 / 276 ...
- Node.js权威指南 (3) - Node.js基础知识
3.1 Node.js中的控制台 / 19 3.1.1 console.log方法 / 19 3.1.2 console.error方法 / 20 3.1.3 console.dir方法 / 21 3 ...
随机推荐
- vue.js——初体验
看到最近很火的vue.js,于是开启了自己人生中首篇翻译之路,才意识到这个纯英文版的的确没有中文的通俗易懂~~~~~~不过, 还是硬着头皮把这篇英文版的博客给翻译完了,希望可以帮助自己的同时也方便别人 ...
- shell脚本流程搭建
程序中删除文件夹即用rm -rf ${Dir} rm -f ${Dir}/* rm -f ${Dir}* 的时候要注意先检查路径变量是否有定义不为空. if [ ! -z ${LogDir} ]; t ...
- JDE910笔记1--基础介绍及配置
1.一般JDE部署后环境: DV:开发环境 PY:测试环境 PD:正式环境 根据端口号区分不同环境,可配置.同时,JDE默认使用分发服务器,不同环境连接为不同的数据库. 2.命名规范: 自定义项目.函 ...
- Entity Framework 复杂类型
为了说明什么是复杂属性,先举一个例子. public class CompanyAddress { public int ID { get; set; } public string Compan ...
- spring mvc如何获取问号后的url参数
@RequestMapping(method=RequestMethod.GET) public ModelAndView allUsers(@RequestParam int page){ Mode ...
- GL10控制图形旋转
GL10提供了glRotatef(float angle , float x , float y , float z)方法,该方法用于控制旋转,该方法种angle控制旋转角度:而x.y.z参 ...
- 闭包 (循环事件获取不到i) 和 各种解决循环获取不到i的解决方法
for(var i in fav){ (function(){ var p=i; var obj=$S.getId(fav[i]); ...
- 类成员函数作为pthread_create函数参数
from:http://www.cnblogs.com/shijingxiang/articles/5389294.html 近日需要将线程池封装成C++类,类名为Threadpool.在类的成员函数 ...
- MyEclipse取消验证Js的两种方法
MyEclipse取消验证Js的两种方法 作者: 字体:[增加 减小] 类型:转载 通过js写一个web工程的相关页面时感觉很卡,修改内存也不行下面有两种解决方法,大家可以尝试下 前言:有时我们通过j ...
- 黑马程序员——C语言基础 scanf函数 基本运算 三目运算符
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)scanf函数 1> 简单介绍一下scanf函数 这是在 ...