Node学习笔记---初识Node
博客原文地址:Claiyre的个人博客 https://claiyre.github.io/
博客园地址:http://www.cnblogs.com/nuannuan7362/
如需转载,请在文章开头注明原文地址
前言
作为一名前端er,即便没有用过,想必也听说过很多次Node了。在接触Node前,我对它印象大致有:
- 问世不久就迅速风靡web界
- 前端用js就可以写后端了
- 速度快
鉴于它的火热程度和前端er特有的好奇心,博主决定深入了解一下这个神奇的Node。并在此将学习心得记录下来,用于巩固和分享。
正文
Node的作者Ryan Dahl在2009年5月在github上发布了其最初的版本,除了Node这个名字外,它还有很多别称,如Nodejs,NodeJS,Node.js等。它是通过通信协议来组织许多个Node,非常容易通过扩展构建大型应用。每一个Node进程都构成这个网络应用的节点,这也是node名称的由来。
Node的特征
Node只是将前端中广泛应用的思想迁移到了服务器端,它没有改变JavaScript语言本身的任何特性,依旧基于作用域和原型链。它有如下特点:
异步I/O
和Ajax原理类似,Node也应用了异步I/O,大多数的Node操作都异步的方式进行调用,无需等待前一调用的结束,极大的提升了效率。以Ajax异步调用为例,下面这张图清楚的阐释了异步I/O的原理:

事件与回调函数
Node将前端浏览器中应用广泛且较成熟的引入后端,配合异步I/O,将事件点暴露出来,形成整体逻辑。
如下面这个例子,服务器端处理Ajax异步提交的过程:
var http = require('http');
//侦听服务器的request事件
http.createServer(function (req,res){
var postData = " ";
req.setEncoding = ('utf8');
//侦听请求的data事件
req.on("data",function (chunk){
postData += chunk;
});
//侦听请求的end事件
req.on("end",function (){
res.end(postData);
});
}).listen(8080);
console.log('服务器已启动');
事件的编程方式具有轻量级,松耦合,只关注事物点等优势,但在多个异步场景下,事件与事件相互独立,如何协作是一个问题。从上面可以看到,回调函数无处不在。Node除了异步和事件外,回调函数也是一大特色。纵观下来,回调函数也是最好的接受异步调用返回数据的方式。
3. 单线程
Node保持了JavaScript在浏览器中是单线程的特点。单线程的最大好处是不用像多线程编程那样处处在意状态的同步问题,既没有死锁的存在,也没有线程上下文切换所带来的性能上的开销。但单线程也有它的缺点,如
- 无法利用多核CPU
- 错误会引起整个应用退出
- 大量计算长时间占用CPU,导致无法继续调用异步I/O
Node利用“子进程机制”来解决这些问题。通过将计算分发到各个子进程,可以将大量计算分解掉。然后再通过进程之间的事件消息传递结果,很好得保持应用模型的简单和低依赖。
4. 跨平台
起初,Node只能在Linux平台上。随着Node的发展,微软注意到了它的存在并投入了一个团队帮助Node实现Windows平台的兼容。下图是Node基于libuv实现跨平台的架构示意图:

Node的使用者
- 前后端编程环境的统一。这类的代表是雅虎。雅虎开放了Cocktail框架,利用自身身后的前端沉淀,将YUI3这个前端框架的能力要借助Node延伸到了服务器端,使得使用者摆脱了日常工作中一边写JavaScript一边写PHP带来的上下文交换负担。
- Node带来的高性能I/O用于实时应用。典型代表有腾讯,花瓣网,蘑菇街等。腾讯将NOde应用在长连接中已提供实时功能。后两者通过socket.io实现实时通知。
- 并行I/O使得使用者可以更高效地利用分布式环境。 阿里巴巴与ebay是这方面的典型。
- 并行I/O,有效利用稳定接口提升web渲染能力。 放弃同步等待式的顺序请求,大胆采用并行I/O,加速数据获取,从而提升Web的渲染速度。
- 云计算平台提供Node支持。 微软将Node引入Azure的开发中,阿里云、百度纷纷在云服务器上提供Node应用托管服务。
- 游戏开发领域。 游戏领域对实时和并发有很高的要求。网易pomelo实时框架,可以应用在游戏和高实时应用中。
- 工具类应用。过去依赖Java或其他语言编写的工具类应用,纷纷被一些前端工程师用Node重写,用前端熟悉的语言构建熟悉的工具。
结语
Node在开发高并发、高性能的后端服务程序上有着极大的优势,也正是Node,让JavaScript这门仅活跃于网页编程的脚本语言可以驱动复杂的后端程序。个人认为,Node的出现,对前端领域而言,是一次极大的飞跃,值得每一位前端工程师认真对待并学习。
Node学习笔记---初识Node的更多相关文章
- node的重点学习笔记(1)————node
node的重点学习笔记(1)----node 提到node就必须提一下他的npm了,npm是世界上最大的开放源代码的生态系统.通俗来说这就如同亚马逊丛林,要啥物种有啥物种,一个巨大的生态圈,里面有一堆 ...
- node学习笔记(二)(ajax方式向node后台提交数据)
通过ajax向node后台提交数据过程(附手写前后台代码),并总结post与get的区别 POST 前台代码 //CSS简单给点样式 <style> form{ width: 200px; ...
- Nodejs全站开发学习系列 & 深入浅出Node学习笔记 & Spider抓取
https://course.tianmaying.com/node 这个系列的文章看起来很不错,值得学习一下. /Users/baidu/Documents/Data/Interview/Web-S ...
- node 学习笔记 - fs 文件操作
本文同步自我的个人博客:http://www.52cik.com/2015/12/03/learn-node-fs.html 最近看到群里不少大神都开始玩 node 了,我感觉跟他们步伐越来越大了, ...
- 将js进行到底:node学习笔记1
废话:自高中以来一直对编程充满激情,磨剑五年,如今要毕业了,我不想用我已经擅长的知识敷衍,而想以一个全新的领域去面向我的毕设--是时候学习一下node.js node.js基础 对于JavaScrip ...
- Node.js学习笔记(1) - Node.js简介
近期在看一些Node.js的知识,看完后觉得,一些前面的东西忘记了,于是整理一下,方便自己查阅,也希望对学习Node.js的朋友有些帮助: 当然以下只是我个人的观点和理解,不喜勿喷,也望大神指教. 一 ...
- node学习笔记第一天
ES6---* JavaScript语言随着使用的人越来越多,ECMA语法规范:if/else* 为了让js语言更适应大型应用的开发.旨在消除一些怪异的行为 ### 包含内容(strict严格模式)- ...
- node.学习笔记(关于http2的讲解)
个人总结:读完这篇文章需要30分钟 http2部分很有学习价值,可以好好看. 用node搭建TCP服务器 用node搭建HTTP服务器 用node文件fs模块对文件读取,并用流的方式写入 用url路 ...
- node学习笔记(一)本地文件目录查看器
Node.js 新闻 nw.js 前端开发桌面应用 内容 node.js实战 照例提供百度云链接,本来以为是实战系列的那本,但不是,不过这本也不错 链接:https://pan.baidu.com/s ...
随机推荐
- 科学技术库Numpy
一.生成矩形操作 1)numpy获取的数据是以 “,” 为分割的数据结构,来生成矩阵 注意:skip_header=1 去掉行首,即说明行 ,Cao jin,,,python,-- ,张二毛,,, ...
- python之并发编程进阶篇9
一.守护进程和守护线程 1)守护进程的概念 什么是守护进程: 守护: 在主进程代码结束情况下,就立即死掉 守护进程本质就是一个子进程,该子进程守护着主进程 为何要用守护进程 守护进程本质就是一个子进程 ...
- Java的GUI如何能够切换界面
在设计GUI的时候,会遇到类似于菜单栏的切换,如何做到界面切换 使用一个JTabbedPane组件,就可以实现界面的切换问题. 在使用的时候可以将里面要使用的组件进行一个封装,封装成一个Panel.再 ...
- 2019.01.08 codeforces 1009F. Dominant Indices(长链剖分)
传送门 长链剖分模板题. 题意:给出一棵树,设fi,jf_{i,j}fi,j表示iii的子树中距离点iii距离为jjj的点的个数,现在对于每个点iii要求出使得fif_ifi取得最大值的那个jjj ...
- 2019.01.02 bzoj5300: [Cqoi2018]九连环(fft优化高精+快速幂)
传送门 题意不好描述(自己看样例解释) 首先可以推出一个递推式:fn=fn−1+2fn−2+1f_n=f_{n-1}+2f_{n-2}+1fn=fn−1+2fn−2+1 然后可以构造两个等式: ...
- ubuntu上安装win7系统(64位的)
http://www.linuxidc.com/Linux/2012-11/74195.htm deb文件在ubuntu上直接用dpkg -i xxx.deb 如果虚拟机上只显示32位,则可能是cpu ...
- IE 8 浏览器 F12 调试功能无法使用
“按下F12之后,开发人员工具在桌面上看不到,但是任务栏里有显示.将鼠标放在任务栏的开发人员工具上,出现一片透明的区域,选中之后却出不来.将鼠标移动到开发人员工具的缩略图上,右键-最大化,工具就全 ...
- 微信小程序 js结构
// pages/index/index.js Page({ /** * 页面的初始数据 */ data: { }, /** * 生命周期函数--监听页面加载 */ onLoad: function ...
- 手把手教Electron+vue的使用
.现如今前端框架数不胜数,尤其是angular.vue吸引一大批前端开发者,在这个高新技术快速崛起的时代,自然少不了各种框架的结合使用.接下来是介绍electron+vue的结合使用. 2.Elect ...
- 单片机CPU
MCS-51的CPU由 运算部件和 控制部件构成 运算部件 包括ALU.位处理器.累加器A.暂存器.程序状态寄存器PSW.寄存器B 累加器A 一个8位累加器,A的进位标志Cy同时是位处理器的一位累加器 ...