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 屏蔽鼠标键盘的几段代码
Jan 02 Javascript
浅谈Jquery为元素绑定事件
Apr 27 Javascript
JavaScript中的条件判断语句使用详解
Jun 03 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
Jul 18 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
Jun 27 Javascript
BootStrap的table表头固定tbody滚动的实例代码
Aug 24 Javascript
js实现textarea限制输入字数
Feb 13 Javascript
微信小程序五星评分效果实现代码
Apr 06 Javascript
ES6新特性一: let和const命令详解
Apr 20 Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
ReactNative之FlatList的具体使用方法
Nov 29 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
Oct 19 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 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
在Python中marshal对象序列化的相关知识
2015/07/01 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
python matlibplot绘制3D图形
2018/07/02 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
Python使用Pygame绘制时钟
2020/11/29 Python
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
安全生产专项整治方案
2014/05/06 职场文书
签约仪式策划方案
2014/06/02 职场文书
义和团口号
2014/06/17 职场文书
民间借贷借条范本
2015/05/25 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL