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 相关文章推荐
JavaScript进阶教程(第四课第一部分)
Apr 05 Javascript
js模仿html5 placeholder适应于不支持的浏览器
Jan 13 Javascript
jquery获取当前日期的方法
Jan 14 Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
Dec 12 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
Sep 26 Javascript
超全面的javascript中变量命名规则
Feb 09 Javascript
Vue实现一个返回顶部backToTop组件
Jul 25 Javascript
Vue.js学习笔记之常用模板语法详解
Jul 25 Javascript
vue 自定义 select内置组件
Apr 10 Javascript
layui form.render('select', 'test2') 更新渲染的方法
Sep 27 Javascript
javascript-hashchange事件和历史状态管理实例分析
Apr 18 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中的foreach函数
2013/08/31 PHP
PHP的拦截器实例分析
2014/11/03 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
用JS实现的一个include函数
2007/07/21 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
python用requests实现http请求代码实例
2019/10/31 Python
Python如何根据时间序列数据作图
2020/05/12 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
利用python实现汉诺塔游戏
2021/03/01 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
啤酒销售实习自我鉴定
2013/09/24 职场文书
投资建议书模板
2014/05/12 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书
初中美术教学反思
2016/02/17 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
Redis三种集群模式详解
2021/10/05 Redis
mongoDB数据库索引快速入门指南
2022/03/23 MongoDB