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 相关文章推荐
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
Sep 06 Javascript
在父页面调用子页面的JS方法
Sep 29 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
jQuery 3.0十大新特性
Jul 06 Javascript
巧用数组制作图片切换js代码
Nov 29 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
Sep 23 jQuery
sublime text配置node.js调试(图文教程)
Nov 23 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
May 16 jQuery
详解Vuex下Store的模块化拆分实践
Jul 31 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 Javascript
JavaScript实现拖拽盒子效果
Feb 06 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
基于Jquery的简单图片切换效果
2011/01/06 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
js常见遍历操作小结
2019/06/06 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
Python 多线程的实例详解
2017/09/07 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
python里 super类的工作原理详解
2019/06/19 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
在python中求分布函数相关的包实例
2020/04/15 Python
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
企事业单位求职者的自我评价
2013/12/28 职场文书
银行门卫岗位职责
2013/12/29 职场文书
大学生职业生涯规划范文
2014/01/22 职场文书
十八大闭幕感言
2014/01/22 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
留学推荐信(中英文版)
2015/03/26 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技