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,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
随机推荐
- linux-13基础命令之-touch,mkdir
1. touch 命令 用于创建空白文件与修改文件时间,格式:touch[选项][文件]: linux 下文件时间有三种 @1.更改时间(mtime):内容修改时间: @2.更改权限(ctime): ...
- 升级AutoMapper后遇到的“Missing map”与“Missing type map configuration”问题
前几天发现 AutoMapper 3.3 的一个性能问题(详见:遭遇AutoMapper性能问题:映射200条数据比100条慢了近千倍),于是将 AutoMapper 升级至最新的 5.1.1 看是否 ...
- 冲刺阶段 day 14
项目进展 经过这几个星期的努力,我们已经完成了我们的软件工程项目,经过多次测试,项目已经可以准确无误地运行. 存在问题 测试期间,未发现问题. 心得体会 在这几个星期的努力下,我们终于完成了我们预期的 ...
- Python--增量循环删除MySQL表数据
需求场景: 有一业务数据库,使用MySQL 5.5版本,每天会写入大量数据,需要不定期将多表中“指定时期前“的数据进行删除,在SQL SERVER中很容易实现,写几个WHILE循环就搞定,虽然MySQ ...
- JavaScript思维导图—DOM基本操作
JavaScript思维导图-来自@王子墨http://julying.com/blog/the-features-of-javascript-language-summary-maps/ DOM基本 ...
- [MFC] VS2013版本MFC工程移植到VC6.0上
:VS虽号称“宇宙最强IDE”,但是有时候安装包太大,动不动就几个G:而且安装好之后也会多出很多几乎很难用到的部分,这对于那些处女座的人如何忍受!本文不是吐槽,而是给出一种在应急场景下,不用安装新版本 ...
- 如何在JavaScript中正确引用某个方法(bind方法的应用)
在JavaScript中,方法往往涉及到上下文,也就是this,因此往往不能直接引用,就拿最常见的console.log("info…")来说,避免书写冗长的console,直接用 ...
- 用DirectX实现魔方(一)
关于魔方 魔方英文名字叫做Rubik's Cube,是由匈牙利建筑学教授和雕塑家Ernő Rubik于1974年发明,最初叫做Magic Cube(这大概也是中文名字的来历吧),1980年Ideal ...
- Spring Trasnaction管理(1)- 线程间事务隔离
问题导读 Spring中事务是如何实现的 Spring中各个线程间是如何进行连接.事务隔离的 Spring事务配置 Spring的事务管理应该是日常开发中总会碰到的,但是Spring具体是怎么实现线程 ...
- 关于redis启动流程介绍
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/94.html?1455870894 1. 准备运行环境 * 设置oom h ...