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 相关文章推荐
关于IFRAME 自适应高度的研究
Jul 20 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
May 07 Javascript
JS实现让访问者自助选择网页文字颜色的方法
Feb 24 Javascript
深入理解JavaScript中的对象复制(Object Clone)
May 18 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
Jun 03 Javascript
Bootstrap table两种分页示例
Dec 23 Javascript
深入浅出理解JavaScript闭包的功能与用法
Aug 01 Javascript
Angular7.2.7路由使用初体验
Mar 01 Javascript
layui--js控制switch的切换方法
Sep 03 Javascript
24个解决实际问题的ES6代码片段(小结)
Feb 02 Javascript
使用原生JS实现滚轮翻页效果的示例代码
May 31 Javascript
Vue+Element自定义纵向表格表头教程
Oct 26 Javascript
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
重料打造自己的“宝马”---第三代
2021/03/02 无线电
PHP 多维数组排序实现代码
2009/08/05 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
php生成word并下载代码实例
2019/03/15 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
PHP7修改的函数
2021/03/09 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
js 表格隔行颜色
2009/12/02 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
js几个验证函数代码
2010/03/25 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
详解JS面向对象编程
2016/01/24 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Python OpenCV实现视频分帧
2019/06/01 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
Python any()函数的使用方法
2019/10/28 Python
Python字节单位转换实例
2019/12/05 Python
python基于property()函数定义属性
2020/01/22 Python
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
国际商务英语专业求职信
2014/07/08 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
学校端午节活动总结
2015/02/11 职场文书
廉洁自律证明
2015/06/24 职场文书
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL
服务器nginx权限被拒绝解决案例
2022/09/23 Servers