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 相关文章推荐
Code:loadScript( )加载js的功能函数
Feb 02 Javascript
Jquery事件的连接使用示例
Jun 18 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
May 23 Javascript
移除AngularJS下URL中的#字符的方法
Jun 19 Javascript
无法获取隐藏元素宽度和高度的解决方案
Mar 07 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
Jan 16 Javascript
详解Vue文档中几个易忽视部分的剖析
Mar 24 Javascript
微信小程序实现横向增长表格的方法
Jul 24 Javascript
Weex开发之地图篇的具体使用
Oct 16 Javascript
node创建Vue项目步骤详解
Mar 06 Javascript
vue-video-player视频播放器使用配置详解
Oct 23 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 date与gmdate的获取日期的区别
2010/02/08 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
浅析return false的正确使用
2013/11/04 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
vue小白入门教程
2018/04/02 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
Python用for循环实现九九乘法表
2018/05/31 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
师范生自荐信范文
2013/10/06 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
个人廉政承诺书
2015/04/28 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android