NoteJS简介
NodeJS是一个使用了Google高性能V8引擎的服务器端JavaScript实现。它提供了一个(几乎)完全非阻塞I/O栈,与JavaScript提供的闭包和匿名函数相结合,使之成为编写高吞吐量网络服务程序的优秀平台。
NoteJS特性
1. 单线程
这说明它只能用一个CPU,在多核CPU上没有优势;不过可以通过以下方式实现多核CPU的利用:
a) 使用软件负载均衡:为每个处理器单独启动一个NodeJS进程,每个进程都运行HTTP服务并绑定到不同的端口。这样需要一个负载均衡软件,将客户端请求转发到各进程,这个软件知道每个服务进程的端口。
b) 使用操作系统内核做负载均衡:在node-v0.1.98中 ,雅虎贡献了一个用于传递和重用文件描述符的核心补丁,允许如Connect和multi-node等HTTP框架使用多个进程同时提供HTTP服务,而且不需要修改原有的程序代码和配置。
c) 使用NodeJS转发请求:需要node-v0.1.100或更高版本以及node-webworker。可以认为Web Worker是一个独立的执行上下文(类似进程),它可以由JavaScript代码生成并来回传递数据。
2. 非阻塞IO
nodejs通过libev事件得到IO执行状态,而不是轮询,提高了CPU利用率。
虽然nodejs是单线程的,但它的IO操作是多线程的,多个IO请求会创建多个libeio线程(最多4个),使通常情况的IO操作性能得到提高。
但是当IO操作情况比较复杂的时候,有可能造成线程竞争状态,导致IO性能降低;而且libeio最多创建4个线程,当同时有大量IO请求时,实际性能有 待测量。另外,由于每个IO请求对应一个libeio的数据结构,当同时有大量IO操作驻留在系统中时候,会增加内存开销。
Libeio为了实现异步IO功能,带来了额外的管理,当IO数据量比较小的时候,整体性能不一定比同步IO好。
3. Google V8
C++编写,解释JS更快,性能更好。
测试结果表明,nodeJS性能远超php\python\ruby。
4. 事件驱动
传统的web server多为基于线程模型。你启动Apache或者什么server,它开始等待接受连接。当收到一个连接,server保持连接连通直到页面或者什么事务请求完成。如果他需要花几微妙时间去读取磁盘或者访问数据库,web server就阻塞了IO操作(这也被称之为阻塞式IO).想提高这样的web server的性能就只有启动更多的server实例。
相反的,NodeJS使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)
运行NodeJS
nodeJS可以运行在各个平台上:windows\mac\linux。安装方法也是下载双击便可安装,无需配置,一步到位。
以下是hello world例子:
1. 编写hello_world.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
2. 运行:node hello_world.js
Server running at http://127.0.0.1:1337/
3. 访问:http://127.0.0.1:1337/
像apache一样,nodeJS是模块化的,可以通过安装npm来安装任何模块:
$ npm install MODULE
然后通过:require(‘MODULE’)引进你想要的任何模块。社区相当丰富,模块也相当多,基本上能找到你想要的任何模块:web framework/database/templating/css engines/build and deployment/smtp/rpc/tcp\ip等等。
比较出色的web框架有express,国人更是在此基础上开发出性能更高的rrestjs web框架,性能堪比nginx!express再配合出色的jade view engine,就可以实现复杂的MVC开发模式。
NodeJS带来的改变
对于前端开发者,有了一个非常好的机会切入后端开发或者尝试后端开发,而无需重新学习一门新的语言和语法。前端开发者学习一些基本的服务器端知识,无需依赖额外的资源,就可以靠自己快速开发出一个功能完整的原型,这是以前无法想象的。
对于后端开发者,NodeJS提供一种全新的开发思路和性能更好的动态语言。作为追求性能的后端开发者,在动态语言选择中,NodeJS是非常有性能优势的。前后端代码复用不再是幻想。例如,表单输入有效性判断的业务逻辑代码可以很有地复用。更重要的是让前后端开发者的思维相互交叉渗透,会萌发出更多创新火花。
NodeJS现况与应用场景
目前NodeJS主要还是应用在一些中小型的Web项目,以及特定的开发平台中,更多的还是一些应用逻辑层面的开发,对于NodeJS自身性能和功能的挖掘还停留在一个比较浅的层次上。
目前国内大中型的系统中实际应用NodeJS作为线上业务系统还不多见。淘宝内目前有一些大中型项目已经在线运行,如NodeFox(分布式Mysql查询与管理服务)、Itier(异构数据源的中间层数据服务)、淘宝指数。
然而,微软、雅虎、LinkedIn、eBay都在使用,并且拥有目前最火爆的开源社区,以及最频繁更新和贡献的第三方模块支持,这是一个高速飞奔的生态系统。
由于NodeJS天生的异步非阻塞,单线程特色,对于大量的io依赖性应用,如中间层、应用服务器、代理服务等是非常适合的场景。由于NodeJS技术社区很给力,提供了大量的功能模块,对于快速开发中小型的Web项目很合适
NodeJS开发注意
1. 注意思维方式的转换,不要用串行系统的思路进行NodeJS系统的设计。
2. 注意ECMA Script 5的新特性对于代码和程序运行效率的影响。
3. 单线程模式中的资源共享给系统设计带来变化。
4. 异步模式下的异常处理。
NodeJS相关资源网站
官网:http://www.nodejs.org
nodeJS模块:https://github.com/joyent/node/wiki/modules
国内社区:http://cnodejs.org/
Express官网:http://expressjs.com/guide.html
Jade官网:http://jade-lang.com/
分享到:
相关推荐
nodejs初级教程
nodejs14.9.0
NodeJS是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。这个"NodeJS学习笔记和代码"的压缩包显然包含了帮助初学者掌握NodeJS基础知识和实践技能的所有必要资料。 ...
Idea 配置前端 Web Nodejs 项目 Idea 配置前端 Web Nodejs 项目是指在 IntelliJ IDEA 集成开发环境中配置 Nodejs 项目的步骤。下面我们将详细讲解配置的步骤和相关知识点。 Idea 配置 Nodejs 项目 首先,我们需要...
NodeJS中文文档精编.pdf 全文免费 NodeJS是 JavaScript 运行时环境,可以让 JavaScript 代码在服务器端执行。NodeJS 实际上是对 ES 标准的一个实现,同时 Node 也是一个 JS 引擎。 Node 只对 ES 标准进行了实现,...
NodeJS是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript进行服务器端编程,打破了JavaScript只能在浏览器中运行的传统。本指南将深入探讨NodeJS的核心概念、开发工具、模块系统、网络编程...
节点js NodeJS示例项目
NodeJS是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程,从而打破了JavaScript只能在浏览器中运行的传统。本"NodeJS整理手册文档"旨在为对NodeJS感兴趣的朋友们提供一...
资源名称:NodeJs技术经典文档资源目录:【】Node.js开发指南_中文正版【】nodejs开发指南pdf及源码及win安装程序【】nodejs手册中文【】NodeJs教程【】umav4simple【】七天学会NodeJS【】七天学会NodeJS【】深入浅...
nodejs视频教程,可以快速帮助你入门nodejs开发中,nodejs不错哦
基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码...
nodejs11安装文件,解决win7操作系统nodeJs环境搭建失败问题:Node.js is only supported on Windows 8.1, Windows Server 2012 R2, or higher
liunx nodejs+nginx配置收藏版liunx nodejs+nginx配置收藏版
NodeJS 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程,极大地推动了全栈开发的流行。NodeJS 的设计思想是事件驱动、非阻塞 I/O 模型,这使得它在处理高并发...
nodeJs 12.22.12-x64-windows版本 nodeJs 12.22.12-x64-windows版本 nodeJs 12.22.12-x64-windows版本 nodeJs 12.22.12-x64-windows版本 nodeJs 12.22.12-x64-windows版本
NodeJS 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者在服务器端使用 JavaScript 进行编程,极大地提升了开发效率。在 Windows 环境下配置和使用 NodeJS,主要涉及以下几个步骤: 一、安装 ...
NodeJS数据库模型建模工具源码 NodeJS数据库模型建模工具源码 NodeJS数据库模型建模工具源码 NodeJS数据库模型建模工具源码 NodeJS数据库模型建模工具源码 NodeJS数据库模型建模工具源码 NodeJS数据库模型...
NodeJs思维导图总结
nodejs 学习笔记 nodejs 学习笔记 nodejs 学习笔记
2013年7月4日制作的nodejs官网的最新版本的chm文档,方便nodejs学习者离线预览nodejs官网,包括nodejs的英文api