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 相关文章推荐
图标线性回归斜着移动到指定的位置
Aug 16 Javascript
JavaScript开发人员的10个关键习惯小结
Dec 05 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
Aug 10 Javascript
JS使用正则表达式找出最长连续子串长度
Oct 26 Javascript
JS实现的合并两个有序链表算法示例
Feb 25 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
May 03 Javascript
Element ui 下拉多选时新增一个选择所有的选项
Aug 21 Javascript
vue项目中使用bpmn为节点添加颜色的方法
Apr 30 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
May 17 Javascript
Vue Render函数原理及代码实例解析
Jul 30 Javascript
WebPack工具运行原理及入门教程
Dec 02 Javascript
如何利用js在两个html窗口间通信
Apr 27 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实现框架(一)
2006/10/09 PHP
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
js输出列表实现代码
2010/09/12 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
js实现拖拽功能
2017/03/01 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
Python实现的计数排序算法示例
2017/11/29 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
python+tkinter实现学生管理系统
2019/08/20 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
python实现三种随机请求头方式
2021/01/05 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
普天C++笔试题
2016/03/20 面试题
this关键字的含义
2015/04/08 面试题
ktv服务员岗位职责
2015/02/09 职场文书
七年级思品教学反思
2016/02/20 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang