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实现网页右下角固定位置展开关闭特效的方法
Jul 27 Javascript
有关Promises异步问题详解
Nov 13 Javascript
jquery插件之文字间歇自动向上滚动效果代码
Feb 25 Javascript
JS实现的颜色实时渐变效果完整实例
Mar 25 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
May 28 Javascript
js 自带的sort() 方法全面了解
Aug 16 Javascript
JavaScript与java语言有什么不同
Sep 22 Javascript
简单的网页广告特效实例
Aug 19 Javascript
swiper自定义分页器使用方法详解
Sep 14 Javascript
React中this丢失的四种解决方法
Mar 12 Javascript
Vue Components 数字键盘的实现
Sep 18 Javascript
vue3.0中使用element的完整步骤
Mar 04 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不用递归实现无限分级的例子分享
2014/04/18 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
php开发中的页面跳转方法总结
2015/04/26 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
Script的加载方法小结
2011/01/12 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
python实现logistic分类算法代码
2020/02/28 Python
python文件编写好后如何实践
2020/07/07 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
机械专业技术员求职信
2014/06/14 职场文书
2014年财务部工作总结
2014/11/11 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
Nginx的基本概念和原理
2022/03/21 Servers