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 相关文章推荐
静态的动态续篇之来点XML
Aug 15 Javascript
发一个自己用JS写的实用看图工具实现代码
Jul 26 Javascript
JavaScript使用技巧精萃[代码非常实用]
Nov 21 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
Jun 08 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
Aug 04 Javascript
Bootstrap每天必学之面板
Nov 30 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
Jun 01 Javascript
浅谈JavaScript的计时器对象
Dec 26 Javascript
利用jquery实现实时更新歌词的方法
Jan 06 Javascript
Three.js实现浏览器变动时进行自适应的方法
Sep 26 Javascript
微信小程序实现全局搜索代码高亮的示例
Mar 30 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
Sep 30 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 采集程序原理分析篇
2010/03/05 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
关于this和self的使用说明
2010/08/01 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
Python3学习urllib的使用方法示例
2017/11/29 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
python开发前景如何
2020/06/11 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
四个太阳教学反思
2014/02/01 职场文书
运动会稿件50字
2014/02/17 职场文书
大三学习计划书范文
2014/05/02 职场文书
销售岗位职责范本
2014/06/12 职场文书
医学专业大学生求职信
2014/07/12 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
导游词之青岛崂山
2019/12/27 职场文书
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js