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,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
随机推荐
- Replication的犄角旮旯(一)--变更订阅端表名的应用场景
<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...
- phoenix 开发API系列(一)创建简单的http api
安装 phoenix framework 安装 phoenix 很简单: mix archive.install https://github.com/phoenixframework/archive ...
- 深入理解Ember-Data特性(下)
写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...
- Jenkins+Git 集成测试(build、zip、curl)
自上篇文章<jenkins + Git 搭建持续集成环境>后,这次配置的job有了新的要求,同时也踩到了新的坑.特此记录,以警己身. 任务要求: 这三个步骤都在job配置页面中Build部 ...
- DDD领域驱动设计之领域基础设施层
1.DDD领域驱动设计实践篇之如何提取模型 2.DDD领域驱动设计之聚合.实体.值对象 其实这里说的基础设施层只是领域层的一些接口和基类而已,没有其他的如日子工具等代码,仅仅是为了说明领域层的一些基础 ...
- [转]quick-cocos2d-x 多分辨率适配详解
http://cn.quick-x.com/?p=1436 多种分辨率的适配一直都是一个蛋疼的问题,各家公司可能都有自己的一套方案.今天我为大家介绍的是我们在多款游戏里实践后的解决方案,相对来说成本和 ...
- Lock,LockFree,MemoryBarrier,ConcurrentCollection
最近看并行编程书本的一些心得,简单记录下多线程和并行编程必知必会的几个概念,再次加深自己的理解. .NET Framework4提供了一个新的命名空间System.Collections.Concur ...
- Google 新推出Background sync API
Background sync是Google新推出的Web API,可延迟用户行为,直到用户网络连接稳定.这样有助于保证用户想要发送的数据就是实际发送的数据. 目前存在的问题 网络是消磨用户时间最多的 ...
- 一个老菜鸟所理解的UX及产品流
从事前端开发到目前为止已经有4年多的时间了,从一个小菜鸟一路依靠自学,到目前总算一个老菜鸟了.当然了,从事前端的工作,是免不了要对产品以及用户体验有些许了解的.最近谈论起这方面的内容,就按照自己的想法 ...
- vim添加或删除多行注释
一.多行注释的添加 1. vim的命令模式下(ESC 进入命令模式): 2. 按CTRL+V进入可视化模式(VISUAL BLOCK): 注意:vim命令模式下v进入的是visual模式,ctrl+v ...