大菜鸟学习Node.js系列——打基础

Published: 13 Oct 2015 Category: web

1、 Node.js是什么?

Node.js 是一个基于谷歌浏览器JavaScript执行环境建立的一个平台让JavaScript可以脱离客户端浏览器运行,让JavaScript具有服务器语言的能力。我们可以使用NodeJs方便地快速的搭建易于扩展的网络应用。可以完美地处理实时数据,运行在不同的设备上。

Node.js 借助事件驱动, 非阻塞I/O 模型变得轻量和高效, 非常适合运行在分布式设备的数据密集型的实时应用。V8引擎执行Javascript的速度非常快,性能非常好。Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。

Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!

2.快速搭建一个nodejs服务:

//in app.js

var http=require("http");
//create a server
var server = http.createServer(function(req, res){
	res.writeHead(200, {"content-type":"text/html;charset=UTF-8"});
	res.write("<h1>Hello NodeJs, I am felix.</h1>");
	res.end();
});

server.listen(88);

cmd>node app.js

用浏览器打开 localhost:88 就能访问这个服务了.

3. 学习网站

4. 为什么要用Nodejs?

Node有4大优势(from fens):

  1. Nodejs基于Javascript语言,不用再单独新学一门陌生的语言,从而减低了学习的门槛。同时,Javascript语言在Web前端开发中至关重要,特别HTML5的应用必须要使用,所以前后台统一语言,不仅可以实现程序员的全栈开发,还可以统一公共类库,代码标准化。单凭这一点,Nodejs就已经赢得市场的青睐了。
  2. Nodejs并没有重新开发运行时环境,而是选择了目前最快的浏览器内核V8做为执行引擎,保证了Nodejs的性能和稳定性。
  3. Nodejs的开发非常高效,而且代码简单,得益于Nodejs的单线程机制。而Nodejs的另一个特点异步编程,让Nodejs处理IO密集型应用有了明显的优势。个人感觉,用Nodejs比Java做Web开发要高效10倍,比PHP的代码还要简单。
  4. Nodejs的社区在壮大,不仅包的数量在快速增加,而且包的质量也要明显好于其他语言的。很多明星级的包,都是简单而灵巧的,为了开发者的使用习惯而设计。我最常用到的工具包,如socket.io, moment.js, underscore.js, async.js, express.js, bower.js, grunt.js, forever.js…,确实在改变我以前的编程习惯。 当然,除了我使用Nodejs的理由,很多公司也都有自己的使用理由。

ebay选择Nodejs的理由,可以归纳为以下4点:

  • 动态语言:开发效率非常高,并有能力构建复杂系统,如ql.io。
  • 性能和I/O负载:Nodejs非常好的解决了IO密集的问题,通过异步IO来实现。
  • 连接的内存开销:每个Node.js进程可以支持超过12万活跃的连接,每个连接消耗大约2K的内存。
  • 操作性:实现了Nodejs对于内存堆栈的监控系统。

5. Nodejs不适合的领域

每一种语言或平台都有不擅长领域,对于Nodejs来说最不擅长的领域在于CPU和内存的编程操作。

  1. 计算密集型应用,让Javascript和C去拼计算性能,估计是不可能赢的。
  2. 内存控制,让Javascript和Java比较复杂数据类型定义,也是很困难的。因为Javascript的面向对象是基于JSON的,而Java是直接使用内存结构。所以,通过JSON序列化和反序列的过程控制内存,Javascript就已经输了。
  3. 大内存的应用,由于V8引擎有内存设计的限制,32位环境中最大堆是1G,64位环境中最大堆也不到2G,如果要一次读入10G数据,对于Nodejs来说也无法实现。
  4. 静态服务器,虽然Nodejs的优势在IO密集集应用,但是和Nginx的处理静态资源还是有很大的差距。
  5. 不需要异步的应用:比如系统管理,自行化脚本等,还是Python更顺手,Nodejs的异步调用可能会给编程带来一些麻烦。

6. 15个Nodejs应用场景

列举几个:

  • Web开发:Express + EJS + Mongoose/MySQL
  • REST开发:Restify
    restify 是一个基于Nodejs的REST应用框架,支持服务器端和客户端。restify比起express更专注于REST服务,去掉了express中的template, render等功能,同时强化了REST协议使用,版本化支持,HTTP的异常处理。
  • Web爬虫:Cheerio/Request
  • Web博客:Hexo
  • Web幻灯片:Cleaver
  • Web控制台工具: tty.js
    tty.js 是一个支持在浏览器中运行的命令行窗口,基于node.js平台,依赖socket.io库,通过websocket与Linux系统通信。特性:支持多tab窗口模型; 支持vim,mc,irssi,vifm语法; 支持xterm鼠标事件; 支持265色显示; 支持session。

7、帅的人已经想着怎么用nodejs编一个应用了。。