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学习的常见误区及四大名著的更多相关文章

  1. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  2. Node.js学习看这里:基础、进阶、文章

    Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用. Node.js采用事件 ...

  3. Node.js学习系列总索引

    Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...

  4. 【入门必备】最佳的 Node.js 学习教程和资料书籍

    Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...

  5. node.js学习(1)

    新建便笺 3 node.js学习(1) 1)安装 http://nodejs.org/download/下载. 2)编写一个案例 var http=require("http"); ...

  6. 我的Node.js学习历程

    学习一门技术,每个人都有每个人的方法.我的方法很简单,做项目. 基本概念 在搭建一个node网站之前,还是要掌握一些基本的概念的,这里列举一下,具体的内容大家自己到网上去查: npm bower ex ...

  7. Node.js学习之TCP/IP数据通讯

    Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...

  8. Node.js学习起步

    Node.js学习: 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一个事件驱 ...

  9. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

随机推荐

  1. 一个简单的python线程池框架

    初学python,实现了一个简单的线程池框架,线程池中除Wokers(工作线程)外,还单独创建了一个日志线程,用于日志的输出.线程间采用Queue方式进行通信. 代码如下:(不足之处,还请高手指正) ...

  2. slot游戏中的数学概念

    最近研究slot 算法,看了大量的英文资料,因为母语中文,一直使用中文的英文小白来说,好心塞,悔不当初没学好英文. 下文是从众多的英文中摘录的唯一能够看明白的概念.先给自己留着,到时候深入研究可以看 ...

  3. 【leetcode】Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  4. Hadoop日记Day17---计数器、map规约、分区学习

    一.Hadoop计数器 1.1 什么是Hadoop计数器 Haoop是处理大数据的,不适合处理小数据,有些大数据问题是小数据程序是处理不了的,他是一个高延迟的任务,有时处理一个大数据需要花费好几个小时 ...

  5. [.net 面向对象程序设计进阶] (9) 序列化(Serialization) (一) 二进制流序列化

    [.net 面向对象程序设计进阶]  (9)  序列化(Serialization) (一) 二进制流序列化 本节导读: 在.NET编程中,经常面向对象处理完以后要转换成另一种格式传输或存储,这种将对 ...

  6. [ACM_动态规划] 数字三角形(数塔)

    递归方法解决数塔问题 状态转移方程:d[i][j]=a[i][j]+max{d[i+1][j],d[i+1][j+1]} 注意:1\d[i][j]表示从i,j出发的最大总和;2\变界值设为0;3\递归 ...

  7. bitmap算法

    概述 所谓bitmap就是用一个bit位来标记某个元素对应的value,而key即是这个元素.由于采用bit为单位来存储数据,因此在可以大大的节省存储空间 算法思想 32位机器上,一个整形,比如int ...

  8. linux下获取线程号

    #include <sys/syscall.h> pid_t gettid() { return syscall(SYS_gettid); }

  9. C#入门基础三

    封装:简化用户接口,隐藏实现细节. get{return 属性值:} set{属性值 = value:} 继承:子类继承父类所有非私有成员.继承具有传递性,单根性. 隐式继承:用引号(:)实现. 显示 ...

  10. 阿里云主机(aliyun-Linux) x64安装Redis详解

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/97.html?1455870336 如何在Linux​上安装Redis呢, ...