Node.js的起源 特性 及应用场景

标签: node js 应用 | 发表时间:2013-05-13 19:58 | 作者:[email protected] (鲁塔弗)
出处:http://lutaf.com

2012年在公司做了一次Nodejs( http://nodejs.org/)的讲演,演讲PPT中要点如下

Nodejs:一种高并发务器端编程工具

Nodejs是什么

  • 服务器端运行的 Javascript
  • 基于 Google Chrome的javascript engine V8
  • Evented,no-blocking
  • 扩展js语义:增加了模块化
  • 大约有8000行 c/c++代码,2000行 js 代码

Nodejs为什么选择javascript为载体语言

  1. javascript语法简单,基本上web程序员都会,利于项目的推广
  2. javascript语法特性之一 闭包(),大大简化了异步编程难度
  3. Chrome v8 性能出色,代码结构清晰,二次开发简单

以上3个原因是Nodejs这个项目能够如此成功的客观原因,但是选择什么语法很多时候是作者的个人意愿:我喜欢就行

nodejs两大特点

  1. 利用libevent果断支持高并发
  2. event driven的异步IO模型(不只限于网络io,包括文件读写,数据库访问 都是异步

Nodejs 类库有什么特点

nodejs有很多库函数,印象最深的是

  1. crypto
  2. buffer

crypto 可以使用的场景很少,nodejs在创建之初就比较完备的支持,很罕见

buffer 是写socket server程序必不可少的部件

Nodejs在实际开发中的缺点

我们在某个项目中使用Nodejs开发了一个server程序,运行了1个多月之后就换成了其他方案,缺点有3

  1. nodejs是所谓多路复用的IO模型,程序跑在单实例下(cluster版本很不稳定),没有可靠的watch dog程序,稳定性不高
  2. javascript语法简单到贫乏的地步,不适合用来开发逻辑复杂的代码,总体开发效率不高
  3. nodejs项目不够成熟,运行异常/错误信息的相关度不高,debug效率不高

这几个问题随着Nodejs项目的日渐成熟应该能够得到解决

为什么说Nodejs不适合做web 编程

nodejs有两大特型,这个两个特性 针对 web 编程都不是优势

  1. 高并发对web framework来说意义不大,可以参考 http://lutaf.com/141.htm
  2. 异步IO更是没有用,异步IO是用增加逻辑复杂度为代价来优化性能,对普通http请求,直来直去更好

    大家可能想到这样一种应用场景:某个网页的功能是去Get远程资源,这种情况下用异步IO岂不是很好? 实际情况是:这种应用场景一般都是用消息队列来实现可控异步。在web request handler里面直接做远程请求,很容易block整个应用服务器

Nodejs最佳实践

  • 代码逻辑简单的Gateway Server
  • WebSocket server端支持,有一个很不错开源项目可以直接用: socket.io
  • 快速开发早期生产线上 tcp server

    Nodejs极大的简化了tcp server 编程,比python twitsted,java的mina 都要简单很多,下面就是一个最简单的tcp server程序

    var net = require('net');
    
    var server = net.createServer(function (socket) {
      socket.write('Echo server\r\n');
      socket.pipe(socket);
    });
    
    server.listen(1337, '127.0.0.1');
    

    编程简单,部署到线上很好的性能,值得尝试

相关 [node js 应用] 推荐:

node js 断点调试

- - Web前端 - ITeye博客
大部分基于 Node.js 的应用都是运行在浏览器中的,. 例如强大的调试工具 node-inspector. node-inspector 是一个完全基于 Node.js 的开源在线调试工具,提供了强大的调试功能和友好. 的用户界面,它的使用方法十分简便. 首先,使用 npm install -g node-inspector 命令安装 node-inspector,然后在终.

node-webkit:开发桌面+WEB混合型应用的神器

- - ITeye博客
node-webkit:开发桌面+WEB混合型应用的神器. 大漠穷秋 2014-01-31.         顾名思义,node-webkit就是nodejs+webkit.         这样做的好处显而易见,核心奥义在于,用nodejs来进行本地化调用,用webkit来解析和执行HTML+JS.

什么是Node?

- We_Get - 博客园新闻频道
译者按:前不久Oreilly出了一本小册子“What is Node?”,扼要的讲解了Node的身世和所适用的场景,作者文笔轻松流畅、内容充实,是非常难得的学习资料.   译文全文:http://jayli.github.com/whatisnode/index.html.   作者:Brett McLaughlin ,原文:What is Node?.

Node入门

- - CSDN博客编程语言推荐文章
作者:  Manuel Kiessling. 翻译:  goddyzhao &  GrayZhang &  MondayChen. 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识. 本书绝不是一本“Hello World”的教程. 你正在阅读的已经是本书的最终版.

JS跨浏览器解析XML应用

- - ITeye博客
对于XML,我们可以理解它是一种树结构,它包含根,元素,属性,文本等内容. 不同浏览器都有自己的解析器,把XML读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象. 微软的 XML 解析器与其他浏览器中的解析器是有差异的. 微软的解析器支持对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器.

[Ext JS 4] MVC 应用程序框架

- - CSDN博客Web前端推荐文章
大型客户端应用程序总是很难编写,很难组织和很难维护. 随着功能的增加和更多的开发人员加入项目,对项目的控制也越来越困难了. Ext JS 4 提供了一个新的应用程序框架帮助组织代码. 模型 - 一组栏位和数据的集合. Model (在Ext JS 3中使用Record class). 视图 - 组件类型, grids,trees 和 panels 都是属于试图.

浅析Hadoop Secondary NameNode,CheckPoint Node,Backup Node

- - CSDN博客云计算推荐文章
Hadoop SecondaryNameNode并不是Hadoop 第二个NameNode,它不提供NameNode服务,而仅仅是NameNode的一个工具. 这个工具帮助NameNode管理Metadata数据. NameNode的HDFS文件信息(即Metadata)记录在内存中,client的文件写操作直接修改内存中的Metadata,同时也会记录到硬盘的Edits文件,这是一个Log文件.

[译]什么是Node?

- blacktulip - Taobao UED Team
译者按:前不久Oreilly出了一本小册子“What is Node?”,扼要的讲解了Node的身世和所适用的场景,作者文笔轻松流畅、内容充实,是非常难得的学习资料. 译文全文:http://jayli.github.com/whatisnode/index.html. 作者:Brett McLaughlin ,原文:What is Node?.

用node作桌面开发

- InterMa - CNode社区
node的定位是,server-side javascript. 但程序员最爱做的事,就是把一个东西用在不该用的地方. 那么,可以把node用在桌面开发上吗. 把Javascript用在桌面开发上,早有先例,比如GTK+的gjs,还有Qt的QML(顺带一提,QML代表着桌面开发的另一个方向,a promising way),GNOME3中,也用javascript作为桌面插件的开发语言.