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 表单验证扩展(三)
Oct 20 Javascript
JS模块与命名空间的介绍
Mar 22 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
Apr 20 Javascript
JS判断、校验MAC地址的2个实例
May 05 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
Oct 29 Javascript
快速解决js中window.location.href不工作的问题
Nov 02 Javascript
详解swiper在vue中的应用(以3.0为例)
Sep 20 Javascript
微信小程序-form表单提交代码实例
Apr 29 Javascript
JavaScript中callee和caller的区别与用法实例分析
Jun 28 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
Nov 12 Javascript
vue+element table表格实现动态列筛选的示例代码
Jan 14 Vue.js
如何用JS实现网页瀑布流布局
Apr 24 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
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
jquery tools之tooltip
2009/07/25 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
JS中Location使用详解
2015/05/12 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
初学node.js中实现删除用户路由
2019/05/27 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
python中remove函数的踩坑记录
2021/01/04 Python
python实现经典排序算法的示例代码
2021/02/07 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
小学防溺水制度
2014/01/29 职场文书
村党支部书记承诺书
2014/05/29 职场文书
孔子观后感
2015/06/08 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
《确定位置》教学反思
2016/02/18 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python