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,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
随机推荐
- td标签内的内容过长导致的问题的解决办法
问题描述:在开发过程中,td标签中的有一个cell格中的内容过长,导致td标签高度增加,从而导致整个页面内容的不协调:
- 黑马程序员+ADO.Net基础(中)
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net ...
- 如何利用Github+Appveyor+Nuget打造自己的.net core开源库
以下教程基于你有一个托管在Github上的.net core项目,如果没有的可以自己fork一个或者自己创建了默认的项目即可. 我们打开需要生成nuget包的项目中的project.json文件,有关 ...
- ENode 1.0 - Staged Event-Driven Architecture思想的运用
开源地址:https://github.com/tangxuehua/enode 上一篇文章,简单介绍了enode框架的command service api设计思路.本文介绍一下enode框架对St ...
- WebViewJavascriptBridge的暂时理解
直接从项目里复制了一份关于WebViewJavascriptBridge使用的代码,注释部分是自己暂时的理解.孟哥说,callHandler类似于jq里的trigger, registerHandle ...
- JS判断鼠标移入元素的方向
最终效果 这里的关键主要是判断鼠标是从哪个方向进入和离开的 $("li").on("mouseenter mouseleave",function(e) { v ...
- 纯js实现复制到剪贴板功能
在网页上复制文本到剪切板,一般是使用JS+Flash结合的方法,网上有很多相关文章介绍.随着 HTML5 技术的发展,Flash 已经在很多场合不适用了,甚至被屏蔽.本文介绍的一款JS插件,实现了纯J ...
- Kafka入门初探+伪集群部署
Kafka是目前非常流行的消息队列中间件,常用于做普通的消息队列.网站的活性数据分析(PV.流量.点击量等).日志的搜集(对接大数据存储引擎做离线分析). 全部内容来自网络,可信度有待考证!如有问题, ...
- Android开发学习之路-使用Handler和Message更新UI
在Android中,在非主线程中更新UI控件是不安全的,app在运行时会直接Crash,所以当我们需要在非主线程中更新UI控件,那么就需要用到Handler和Message来实现 Demo中,使用到一 ...
- iOS开发——网络使用技术OC篇&网络爬虫-使用正则表达式抓取网络数据
网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看 ...