NODE.JS学习的常见误区及四大名著
NODE.JS学习的常见误区及四大名著
前段时间由于不满于社区里很多人对于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();
这样一个简单的文件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>


NODE.JS学习的常见误区及四大名著的更多相关文章
- 一点感悟:《Node.js学习笔记》star数突破1000+
写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...
- Node.js学习看这里:基础、进阶、文章
Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用. Node.js采用事件 ...
- Node.js学习系列总索引
Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...
- 【入门必备】最佳的 Node.js 学习教程和资料书籍
Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...
- node.js学习(1)
新建便笺 3 node.js学习(1) 1)安装 http://nodejs.org/download/下载. 2)编写一个案例 var http=require("http"); ...
- 我的Node.js学习历程
学习一门技术,每个人都有每个人的方法.我的方法很简单,做项目. 基本概念 在搭建一个node网站之前,还是要掌握一些基本的概念的,这里列举一下,具体的内容大家自己到网上去查: npm bower ex ...
- Node.js学习之TCP/IP数据通讯
Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...
- Node.js学习起步
Node.js学习: 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一个事件驱 ...
- Node.js学习笔记(3):NPM简明教程
Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
随机推荐
- window下安装wamp环境
Wamp就是Windos Apache Mysql PHP集成安装环境,即在window下的apache.php和mysql的服务器软件.其中php环境配置是至关重要的一部分,本文就针对php在本地的 ...
- 2013-09-22 [随笔]-Roy
不能因为一些小事情而一直影响自己的心情. 每天过得都应该有重点,无论是家庭还是工作还是其他. 要多花时间去吸取些新东西,看书,丰富自己的想法. 不能让日常的乱七八糟影响心情. bingo!
- ASP.NET连接远程Oracle数据库,提示试图加载格式不正确的程序
VS调试远程连接Oracle数据库,一直报错 由于本地计算机是64位的操作系统,而且也确定安装的Oracle客户端是64位的 ,但是一直提示这个错误. 试了很多方法,终于发现可能是 不能在VS中调试的 ...
- PAT/简单模拟习题集(一)
B1001.害死人不偿命的(3n+1)猜想 (15) Description: 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉 ...
- 位运算(&)实现分享弹窗上的图标动态显示/隐藏
一 需求 要求自定义弹窗,上面动态显示多种分享平台,根据后台api接口传递过来的type控制显示哪些平台icon 1 定义平台变量,用2的几次方来定value 2 若要显示那 ...
- 一种基于Orleans的分布式Id生成方案
基于Orleans的分布式Id生成方案,因Orleans的单实例.单线程模型,让这种实现变的简单,贴出一种实现,欢迎大家提出意见 public interface ISequenceNoGenerat ...
- Backbone源码解析(一):Event模块
Backbone是一个当下比较流行的MVC框架.它主要分为以下几个模块: Events, View, Model, Collection, History, Router等几大模块.它强制依赖unde ...
- 基于正则的INI读写工具类,支持加密解密
看到这个标题,有人会问,现在都用xml做配置文件了,谁还用INI文件啊!下面来简单对比一下xml和ini: 1.XML功能强大表达能力强,同时扩展性好. 2.它的主要优势是异构平台的整合.通讯. 3. ...
- 安装金山WPS2013造成的HTML5 file.type值异常
处理代码的兼容性是前端攻城师们的家常便饭了,一般是对各种浏览器进行兼容性处理.但是有时候我们也会遭遇到浏览器以外的影响因素,这个是经常会被忽视掉的内容.比如前几天就听说客户端安装迅雷.暴风影音等软件会 ...
- FusionCharts简单教程(八)-----使用网格组件
有时候我们会觉得使用图像不够直接,对于数据的显示没有表格那样直接明了.所以这里就介绍如何使用网格组件.将网格与图像结合起来.网格组件能够将FusionCharts中的单序列数据以列表的 ...