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 相关文章推荐
js实现iframe动态调整高度的代码
Jan 06 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
Jun 25 Javascript
收集的一些Array及String原型对象的扩展实现代码
Dec 05 Javascript
jquery submit ie6下失效的原因分析及解决方法
Nov 15 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
Dec 07 Javascript
JS实现touch 点击滑动轮播实例代码
Jan 19 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
Feb 28 Javascript
Node.Js生成比特币地址代码解析
Apr 21 Javascript
Vue.js标签页组件使用方法详解
Oct 19 Javascript
vue实现短信验证码登录功能(流程详解)
Dec 10 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
Feb 10 Javascript
详解vue中v-for的key唯一性
May 15 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文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
jQuery实现菜单栏导航效果
2017/08/15 jQuery
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
在Pycharm中安装Pandas库方法(简单易懂)
2021/02/20 Python
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
实习自我鉴定范文
2013/10/30 职场文书
建筑班组长岗位职责
2014/01/02 职场文书
法制宣传口号
2014/06/16 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
通知范文怎么写
2015/04/16 职场文书
东京审判观后感
2015/06/01 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
担保书格式范文
2015/09/22 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
python使用BeautifulSoup 解析HTML
2022/04/24 Python