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 相关文章推荐
Javascript中的Split使用方法与技巧
Mar 09 Javascript
JavaScript 精粹读书笔记(1,2)
Feb 07 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
php结合imgareaselect实现图片裁剪
Jul 05 Javascript
js实现登陆遮罩效果的方法
Jul 28 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
Nov 07 Javascript
基于JS实现网页中的选项卡(两种方法)
Jun 16 Javascript
jQuery读取本地的json文件(实例讲解)
Oct 31 jQuery
js数组去重的N种方法(小结)
Jun 07 Javascript
JS实现的新闻列表自动滚动效果示例
Jan 30 Javascript
vue data对象重新赋值无效(未更改)的解决方式
Jul 24 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
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
判断是否安装flash player及当前版本的JS代码
2013/08/08 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Python 爬虫图片简单实现
2017/06/01 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
Python 串口通信的实现
2020/09/29 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
C语言开发工程师测试题
2016/12/20 面试题
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
文秘应届生求职信
2014/07/05 职场文书
中学生自我评价范文
2015/03/03 职场文书