NODE.JS学习的常见误区及四大名著html
前段时间因为不满于社区里不少人对于NODE.JS的种种误解而写了一篇文章名为:前端
NODE.JS之我见:http://www.cnblogs.com/pugang/p/4374681.html后端
收到了不少兄弟的热情回复和激烈讨论,在此深表感谢,有的朋友以为我写的比较粗犷,没有给出具体的性能分析和对比,在此我想说的是其实好多东西的性能分析,根本就不用我写到博客上,其一是若是我写了,不少人一样会以为不客观,不中立,其二是网上不少中立的机构,随便搜索一下,对比太多了,就比如NODE.JS和Nginx的对比,网上客观的分析太多了,只要你能google。浏览器
近两年的NODE.JS雄起让不少人以为JavaScript就要统一全栈了,网上这种言论充斥着各大论坛,仿佛计算机科学里面惟一最NB的就只有JavaScript,其余的只是都是shit,首先须要澄清的是,我并非愤青,也没有鄙视前端工程师的意图,可是我始终认为,网络上应该有人把一些技术的前因后果说清楚,不要轻信谣传,由于实践是检验整理的惟一标准。服务器
那么JavaScript在NODE.JS里面究竟是一个什么地位呢?NODE.JS究竟是什么呢?我先用一个形象的比喻来讲一下,说完了我会稍加分析,懂球的看看是否是这么个道理。JavaScript之比于NODE.JS就像狐狸和老虎的关系,这里面的老虎是C\C++,而NODE.JS只不过是给老虎批了一层薄薄的皮,你们必定都听过狐假虎威,狐狸之因此NB是由于背后站着老虎,而老虎的NB不仅是一张皮,是来自于骨子里面的NB。网络
另外一个误区是NODE.JS是单线程的,异步IO,因此效率奇高,非通常服务器所能比拟,当NODE.JS跑起来的时候我建议你抓取一个.dump文件看一下,NODE.JS里面到底有多少个线程,单线程的东西能做出异步IO么?给人的感受是NODE.JS已经能够跨越OS而存在了,OS自己也作不到的事情NODE.JS却能够作到,据笔者所知,生产环境中的现有异步IO超过99%都是以多线程或者线程池模拟出来的,因此不要相信这样的谣传。来看下面的简单NODE.JS文件IO示例:前端工程师
var fs = require('fs' ); var http = require('http' ); http.createServer(function(request, response) { var newFile = fs.createWriteStream("readme_copy.md"); request.pipe(newFile); request.on('end' , function() { response.end('uploaded!' ); }); }).listen(8080);
这样一个简单的文件IO恐怕最少也要两个线程才能完成,一个线程用于执行JavaScript,另外一个用于模拟异步IO。因此在这里得出的结论是JavaScript彻底不NB,真正NB的是C\C++,也许你又说了,那为何C\C++没有取得NODE.JS的火爆程度和高性能,那只是你不知道,Nginx就是一个事实的证实,Nginx的性能可能要比NODE.JS要高一些,纯C打造的, 那为何当时NODE当时设计的时候没有选用纯C呢?网上有人写文章说是做者以为C太难了,怕好多人接受不了,并且C的标准库是同步的IO,会让人误用。多线程
另外一个常见的误解是前端的JavaScript和NODE.JS里面的JavaScript是一个东西,其实彻底否则,虽然语法同样,可是仅此而已,前端的JavaScript只能操做浏览器的一亩三分地,然后端的JavaScript跟像是C的代言人,传说中的狐假虎威,C在OS上能作的事情,他基本均可以作到。异步
下面说说NODE.JS学习的四大名著。性能
我通常不多推荐国人写的书,由于好多人写的书浮躁,生猛,不自成体系,以吹NB为乐,以让别人看不懂为荣,包括翻译的书,可是在NODE.JS上我第一本要推荐的是朴灵写的<深刻浅出NODE.JS>, 看得出来朴灵服务端C代码写的不是不少,可是至少他把NODE.JS讲的很清楚并且确实是懂球的,基本上都是对的,这一点就很是可贵,质量上乘,堪比美帝,行文中还能够看出此做者比较谦逊。
我要推荐的另外3本书是以下3本,很少解释了,你们去国外的论坛圈子里转转,或者去亚马逊豆瓣看看书评就懂了。
<Pro Node.js for Developers>
<PROFESSIONAL Node.js ® BUILDING JAVASCRIPT-BASED SCALABLE SOFTWARE>
<Single Page Web Applications>