(转)如何才能学好Node.js

从接触Node.js到现在,一路摸爬滚打,虽然也谈不上精通,但对于如何学习Node.js,还是有一些个人见解的,现在拿出来与大家共勉。一是对自己的总结,二呢也希望能帮助到大家。

本文将包含以下内容:

  • 什么是Node.js
  • Node.js的应用场景
  • Node.js的学习指南
  • 扩展延伸

什么是Node.js

Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用。 Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效,可以完美地处理时时数据, 非常适合 运行在分布式设备 的 数据密集型 的实时应用。通俗点就是 node.js是一个可以让javascript运行在后端的上下文环境+很多方便的现成库。

node.js最大的卖点在于完全异步的I/O模型。比于阻塞I/O,异步I/O模型极大提高web服务的并发性,对于I/O密集型应用来说,会有明显的性能提升。例如对于大量采用Ajax long-polling的网站(典型的如聊天室,知乎的通知推送)能带来很大的提升;因为每一个的long-polling请求都会占用服务器的连接数,虽然大部分连接处在空闲状态,但并发性不强的web框架最终会被大量的连接耗死。而node.js的异步I/O模型最适合于处理这样的情形。

单线程不仅没有降低吞吐率(因为异步),也远离了死锁等同步不当导致的问题。node.js可以通过多进程来提高并发能力;其次单进程多线程的程序往往在内存中共享数据,而内存不能跨机器访问,因此限制了扩展到集群的能力。但是因为异步也带来的一些问题:层层嵌套的回调,异常难以处理。由于程序的模型变成了异步,node.js的代码风格亦偏函数式,对此没有经验的需要一定的时间来适应。因为node.js是基于javascript的,对于想成为全栈道同学,是个很不错的选择。

目前使用Nodejs的公司有 LinkedIn, Yahoo, Paypal, eBay, Walmart,Groupon 还有很多的中小型公司,国内的公司如雪球、淘宝、网易、百度等也都有很多项目运行在 Node.js 之上。

Node.js的应用场景

  • ** 适合 **
    JSON APIs——构建一个Rest/JSON API服务,Node.js可以充分发挥其非阻塞IO模型以及JavaScript对JSON的功能支持(如JSON.stringfy函数)

    单页面、多Ajax请求应用——如Gmail,前端有大量的异步请求,需要服务后端有极高的响应速度

    基于Node.js开发Unix命令行工具——Node.js可以大量生产子进程,并以流的方式输出,这使得它非常适合做Unix命令行工具

    流式数据——传统的Web应用,通常会将HTTP请求和响应看成是原子事件。而Node.js会充分利用流式数据这个特点,构建非常酷的应用。如实时文件上传系统transloadit

    准实时应用系统——如聊天系统、微博系统,但Javascript是有垃圾回收机制的,这就意味着,系统的响应时间是不平滑的(GC垃圾回收会导致系统这一时刻停止工作)。如果想要构建硬实时应用系统,Erlang是个不错的选择

  • ** 不适合**
    CPU使用率较重、IO使用率较轻的应用——如视频编码、人工智能等,Node.js的优势无法发挥

    简单Web应用——此类应用的特点是,流量低、物理架构简单,Node.js无法提供像Ruby的Rails或者Python的Django这样强大的框架

Node.js的学习指南

对于刚接触Node.js的新手来说,第一步无非是打好基础,你需要弄明白JavaScript 的特性语法和node的基本原理。通过一些博文和书籍的学习,对node.js有了一个基本的了解后,可以尝试搭建一个 HTTP 服务器,返回 hello world (使用 HTTP 模块);读取一个 txt 文件,将内容显示到命令行中(使用 fs 模块)等等。以提高自己的自信心。

Node.js 的活力所在是npm 上近 7W 的第三方模块,当你对Node.js已经了解的差不多了,不妨用 Node.js 的第三方模块做些好玩的事情。如搭建一个微博网站;写一个简单的爬虫;调用一些网站的API做一些好玩的东西等等。对一门技术有了足够的信心后,此时应该深入了解下 Node.js 核心模块的用法。好好看下Node.js 官方 API 文档。在此基础上多加实践。不管是用核心模块还是外部模块,尝试用 Node.js 解决某个问题或者替换掉以前用其他语言写过的代码。

读源码可以先挑一些简单的只实现某个特定功能的工具模块的源码读,这种模块的代码通常在几百行,阅读起来并不是很困难,但是却能涨不少的姿势。比如:underscore (学习 JavaScript 的语法和技巧)。在使用 Node.js 时发现没有合适的模块选择或者选择的模块功能不尽人意,这个时候你可以尝试去创建一个模块或者修改现有的模块,并且使用 npm 发布自己的模块或者去该模块的 GitHub 上提 PR 。不断的重复演练,想学不会都难。对于其它技术,也是如此。

最后,要明白学习node最关键的是学习node的核心,也就是node本身,而不是仅仅纠结于大量彼此没有紧密联系的工具和库,因为他们不能帮助你加深对node本身的理解,如果你理解了核心,尤其是核心的概念(未必是语法和实现),理解整个生态系统的其他工具,库,应用也就成竹在胸了。事在人为,把您和大众区分开来的不就是理解的深度吗?

扩展延伸

没有人是无师自通,把一些常用的网站整理下,分享给大家,也算是对自己的一个总结吧。希望对需要的人能有些帮助。
学习网站
极客学院的node专题 --里面的wiki可以是很好的入门资料
CNode --Node.js专业中文社区
node在线编译执行代码
JSER网站关于node的入门教程
Porschev的node学习笔记--博主一直在更新
深入理解JavaScript系列--汤姆大叔的博客

代码示例
N-blog--nswbmw的基于node.js的个人博客源码
awesome-nodejs--用node写的很不错的代码集合

书籍
有些人不太爱看书,但一本好书是对一门技术的最系统的解释。

JavaScript 推荐书籍列表
《深入浅出Node.js》--豆瓣评分8.7
《nodejs入门》--38页极简入门
《Node.js in Practice》
《Node.js the Right Way: Practical, Server-Side JavaScript That Scales》
《Node.js Design Patterns》--这几本是讲Node核心的书

文/吴白(简书作者)原文链接:http://www.jianshu.com/p/babf69a03276著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容