浅谈Node的异步方式和模块开发

Node异步方式

什么是Node?

简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。从上面这段话我们可以发现Node有以下特性 :

  1. 基于chrome v8引擎
  2. 单线程
  3. 非阻塞io 基于事件驱动
  4. common规范

异步编程

我们常常谈到单线程/多线程``阻塞/非阻塞``同步/异步等问题, 那么Node的异步编程是怎么实现的呢? 首先看看异步编程的实现方式有哪些(暂不谈论ES6异步编程) :

  1. 回调函数
  2. 事件监听
  3. 订阅/发布

那么Node是如何实现异步操作的呢?
服务端 : 同步
浏览器(客户端) : 异步 多线程 事件驱动(事件队列)
JS : 单线程 阻塞
nodejs :单进程 单线程 异步编程:回调 事件驱动(事件队列)处理并发

js的运行时单线程的 : 引入事件队列机制
Node.js中的事件模型与浏览器中的事件模型类似 : 单线程+事件队列

异步I/O

  1. 文件操作
  2. 网络操作

在浏览器中也存在异步操作:

  1. 定时任务
  2. 事件处理
  3. Ajax回调处理

Node.js中异步执行的任务:

  1. 文件I/O
  2. 网络I/O

Node模块化开发

传统非模块化开发有如下的缺点

  1. 命名冲突
  2. 文件依赖

前端标准的模块化规范

  1. AMD - requirejs
  2. CMD - seajs

服务器端的模块化规范

CommonJS - Node.js

Node模块化相关的规则

  1. 如何定义模块:一个js文件就是一个模块,模块内部的成员都是相互独立
  2. 模块成员的导出和引入:
    exports与module的关系:module.exports = exports = {};
    模块成员的导出最终以module.exports为准
    如果要导出单个的成员或者比较少的成员,一般我们使用exports导出;如果要导出的成员比较多,一般我们使用module.exports的方式;这两种方式不能同时使用
var sum = function(a,b){
    return parseInt(a) + parseInt(b);
}
// 方法1
// 导出模块成员
exports.sum = sum;
//引入模块
var module = require('./xx.js');
var ret = module.sum(12,13);

// 方法2
// 导出模块成员
module.exports = sum;
//引入模块
var module = require('./xx.js');
module();

// // 方法1
// exports.sum = sum;
// exports.subtract = subtract;
// 
// var m = require('./05.js');
// var ret = m.sum(1,2);
// var ret1 = m.subtract(1,2);
// console.log(ret,ret1);
// 
// // 方法2
// module.exports = {
//     sum : sum,
//     subtract : subtract,
//     multiply : multiply,
//     divide : divide
// }
// 
// var m = require('./05.js');
// console.log(m);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宫若石阅读 4,857评论 0 1
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 8,997评论 2 41
  • 前言 js是从网页小脚本演变过来的,至今,前端的js库,也不像一个真正的模块。前端js经历了工具类库、组件库、前端...
    白昔月阅读 8,591评论 2 11
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    Myselfyan阅读 9,545评论 2 58
  • 马上就晚上11点了,我如约躺到了被窝里。但是因为刚才一直在电脑旁工作,脚特别的凉。即使脚已经伸到了厚厚的被子里,但...
    语文张老师001阅读 1,279评论 -1 0

友情链接更多精彩内容