node模块机制与异步处理详解


Posted in Javascript onMarch 13, 2016

1.模块机制

commonJS模块机制出现的目的是为了构建js在web服务器,桌面程序,浏览器等方面形成生态系统。而node js就是这种规范的一种实现,用requird来引入其他文件,同样,npm也遵循了commonJS定义的包规范,从而形成了一套完整的生态系统。

模块定义并导出

例如有如下一个名为circle.js的文件

exports.getName = function(name) {
  return name
}

模块载入

var circle = require('/circle.js')
console.log(circle.getName('WPY'))

模块加载策略

node模块主要可以分为两类:

原生模块和自定义模块,所谓原生模块就是node自己定义的模块,例如HTTP,fs模块,此类模块加载速度最快。
还有一类是自定义模块,包括包模块,和我们自己定义的文件。无论是原生模块还是自定义模块在第一次加载后都会被node缓存,所以第二次请求时是不会有开销的。

原生模块加载:

require()方法在解析文件名之后,最优先在模块缓存中查找,然后在node的原生模块中查找
从文件加载
module.path 对于每一个被加载的文件模块,在创建这个模块对象的时候都会有一个paths属性。其路径指向引入模块的路径。
在请求绝对路径模块时,不会去遍历node_module加载速度最快。

异步编程

高介函数
高介函数是将函数作为参数,或者作为返回值的函数。

function foo(X) {
  return function() {
    return x
  }
}

NODE带来的最大特性莫过于机遇事件驱动的非阻塞IO。

异步编程解决方案

1.事件发布/订阅模式

事件监听器模式是广泛应用于异步编程,是回调函数的时间化,又称发布/订阅模式。

//订阅

emitter.on("event1", function(message){
  console.log(message)
})
//发布

emitter.emit("event1", "I am message")

2.Promise模式

promise对象具有三种状态,未完成态,完成态,失败态。
promise对象要具有then方法,对于then 方法有以下几点要求

1.接受完成态,错误态的回调方法。
2.只接受function,其余对象将被忽略
3.继续返回promise对象,以实现链式调用

Javascript 相关文章推荐
IE与firefox下Dhtml的一些区别小结
Dec 02 Javascript
JS实现CheckBox复选框全选全不选功能
May 06 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
Jul 13 Javascript
浅谈window对象的scrollBy()方法
Jul 15 Javascript
基于jquery css3实现点击动画弹出表单源码特效
Aug 31 Javascript
Javascript生成带参数的二维码示例
Oct 10 Javascript
学习JavaScript图片预加载模块
Nov 07 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
Feb 28 Javascript
如何以Angular的姿势打开Font-Awesome详解
Apr 22 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
Dec 16 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
Apr 03 Javascript
vue 数据操作相关总结
Dec 17 Vue.js
JS中创建函数的三种方式及区别
Mar 13 #Javascript
使用jQuery操作HTML的table表格的实例解析
Mar 13 #Javascript
Javascript数组Array方法解读
Mar 13 #Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
Mar 13 #Javascript
Javascript数组Array基础介绍
Mar 13 #Javascript
深入探究JavaScript中for循环的效率问题及相关优化
Mar 13 #Javascript
简单谈谈json跨域
Mar 13 #Javascript
You might like
PHP 时间日期操作实战
2011/08/26 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
php实现文件预览功能
2017/05/23 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
javascript加号"+"的二义性说明
2013/03/04 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
python:接口间数据传递与调用方法
2018/12/17 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
办理退休介绍信
2014/01/09 职场文书
庆中秋节主题活动方案
2014/02/03 职场文书
《会变的花树叶》教学反思
2014/02/10 职场文书
晚会主持词开场白
2014/03/17 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
大学生支教感言
2015/08/01 职场文书
员工规章制度范本
2015/08/07 职场文书
小组组名及励志口号
2015/12/24 职场文书
python实现三次密码验证的示例
2021/04/29 Python