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的温度计动画效果
Jun 18 Javascript
jquery监控数据是否变化(修正版)
Apr 12 Javascript
jquery.qrcode在线生成二维码使用示例
Aug 21 Javascript
通过action传过来的值在option获取进行验证的方法
Nov 14 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
Nov 28 Javascript
jQuery实现图片文字淡入淡出效果
Dec 21 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
Feb 25 Javascript
node操作mysql数据库实例详解
Mar 17 Javascript
JavaScript注册时密码强度校验代码
Jun 30 Javascript
vue form check 表单验证的实现代码
Dec 09 Javascript
解决vue字符串换行问题(绝对管用)
Aug 06 Javascript
如何阻止移动端浏览器点击图片浏览
Aug 29 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中的时间显示
2007/01/18 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
动手学习无线电
2021/03/10 无线电
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
python实现挑选出来100以内的质数
2015/03/24 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
pygame实现非图片按钮效果
2019/10/29 Python
Python datetime 如何处理时区信息
2020/09/02 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
安全生产汇报材料
2014/02/17 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL