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 相关文章推荐
基于prototype扩展的JavaScript常用函数库
Nov 30 Javascript
javascript中onclick(this)用法介绍
Apr 19 Javascript
jquery click([data],fn)使用方法实例介绍
Jul 08 Javascript
js锁屏解屏通过对$.ajax进行封装实现
Jul 31 Javascript
JavaScript设计模式之代理模式介绍
Dec 28 Javascript
js实现数组转换成json
Jun 26 Javascript
原生js配合cookie制作保存路径的拖拽
Dec 29 Javascript
JSP防止网页刷新重复提交数据的几种方法
Nov 19 Javascript
jQuery用FormData实现文件上传的方法
Nov 21 Javascript
在Vue中获取组件声明时的name属性方法
Sep 12 Javascript
默认浏览器设置及vue自动打开页面的方法
Sep 21 Javascript
Vue+Express实现登录注销功能的实例代码
May 05 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 _autoload自动加载类与机制分析
2012/02/10 PHP
php实现的用户查询类实例
2015/06/18 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
PHP反射实际应用示例
2019/04/03 PHP
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
前端微信支付js代码
2016/07/25 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
python3中str(字符串)的使用教程
2017/03/23 Python
Python实现的科学计算器功能示例
2017/08/04 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
Python学习笔记之装饰器
2020/08/06 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
学习雷锋倡议书
2014/04/15 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
班级体育活动总结
2014/07/05 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
争先创优心得体会
2014/09/12 职场文书
新教师个人总结
2015/02/06 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python