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 相关文章推荐
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
Sep 12 Javascript
JQuery.closest(),parent(),parents()寻找父结点
Feb 17 Javascript
js弹窗返回值详解(window.open方式)
Jan 11 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
Apr 02 Javascript
HTML页面,测试JS对C函数的调用简单实例
Aug 09 Javascript
原生js实现商品放大镜效果
Jan 12 Javascript
ES6新特性:使用export和import实现模块化详解
Jul 31 Javascript
ES6中Array.find()和findIndex()函数的用法详解
Sep 16 Javascript
微信运维交互机器人的示例代码
Nov 12 Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 Javascript
浅谈webpack和webpack-cli模块源码分析
Jan 19 Javascript
详解Howler.js Web音频播放终极解决方案
Aug 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批量更改数据库表前缀实现方法
2013/10/26 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
浅谈php命令行用法
2015/02/04 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
numpy返回array中元素的index方法
2018/06/27 Python
详解python算法之冒泡排序
2019/03/05 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
ipython和python区别详解
2019/06/26 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python实现的分层随机抽样案例
2020/02/25 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
Python如何将模块打包并发布
2020/08/30 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
国际书籍零售商:Wordery
2017/11/01 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
最新自我评价范文
2013/11/16 职场文书
施工资料员岗位职责
2014/01/06 职场文书
一个大学生十年的职业规划
2014/01/17 职场文书
协议书的格式
2014/04/23 职场文书
网站创业计划书
2014/04/30 职场文书
工作证明英文模板
2014/10/21 职场文书
写景作文评语集锦
2014/12/25 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
分享python函数常见关键字
2022/04/26 Python