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 创建Dom元素
May 07 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
Feb 25 Javascript
JavaScript中常用的运算符小结
Jan 18 Javascript
JS实现向表格中动态添加行的方法
Mar 30 Javascript
JavaScript实现节点的删除与序号重建实例
Aug 05 Javascript
javascript实现平滑无缝滚动
Aug 09 Javascript
对javascript继承的理解
Oct 11 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
Oct 21 Javascript
vue项目中使用bpmn为节点添加颜色的方法
Apr 30 Javascript
公众号SVG动画交互实战代码
May 31 Javascript
JS出现404错误原理及解决方案
Jul 01 Javascript
vue组件开发之tab切换组件使用详解
Aug 21 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/12/06 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
Python格式化压缩后的JS文件的方法
2015/03/05 Python
python杀死一个线程的方法
2015/09/06 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Python pip配置国内源的方法
2020/02/14 Python
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
Java程序开发中如何应用线程
2016/03/03 面试题
幼儿园美术教学反思
2014/01/31 职场文书
课外科技活动总结
2014/08/27 职场文书
劳模事迹材料范文
2014/12/24 职场文书
专家推荐信怎么写
2015/03/25 职场文书