做网站架构的软件,网友wordpress,对网站建设行业的了解,wordpress幻灯片插件 汉化三、node的异步I/O
四、异步编程
1、函数式编程
高阶函数
函数可以作为参数或者返回值。
偏函数用法
偏函数用法是指创建一个调用另外一个部分——参数或变量已经预置的函数——的函数的用法。
举个例子#xff1a;在JavaScrip中进行类型判断时#xff0c;我们通常会进…三、node的异步I/O
四、异步编程
1、函数式编程
高阶函数
函数可以作为参数或者返回值。
偏函数用法
偏函数用法是指创建一个调用另外一个部分——参数或变量已经预置的函数——的函数的用法。
举个例子在JavaScrip中进行类型判断时我们通常会进行类似上述代码的方法定义。如下代码存在的问题是需要重复去定义一些相似的函数如果有 更多的isXXX()就会出现更多的冗余代码。
var toString Object.prototype.toString;
var isString function (obj){return toString.call(obj) [object String];
}
var isFunction function (obj){return toString.call(obj) [object Function];
}改造以后
var isType function (type) {return function (obj) {return toString.call(obj) [object type ];}
}
var isString isType(String)
var isFunction isType(Function)
console.log(isString)
console.log(isFunction)2、异步编程的优势与难点
Node利用JavaScript及其内部异步库将异步直接提升到业务层面这是一种创新。
优势
Node带来的最大特性莫过于基于事件驱动的非阻塞I/O模型这是它的灵魂所在。非阻塞I/0可以使CPU与I/O并不相互依赖等待让资源得到更好的利用。对于网络应用而言并行带来的想象空间更大延展而开的是分布式和云。并行使得各个单点之间能够更有效地组织起来这也是Node在云计算厂商中广受青睐的原因图4-1为异步IO调用的示意图。
难点
异常处理函数嵌套过深阻塞代码多线程编程异步转同步
3、异步编程的解决方案
1. 事件发布/订阅模式
2.Promise / Deferred
3.流程控制库
4、异步并发控制
五、内存控制
V8的内存限制
在一般的 后端开发语言中在基本的内存使用上没有什么限制。然而在Node中通过JS使用内存时就会发现只能使用部分内存64位系统下约为1.4GB32位系统下 约为0.7GB。在这样的限制下将会导致Node无法直接操作大内存 对象。
高效使用内存
这一节中定义的闭包概念是 实现外部作用域访问内部作用域中变量的方法叫做闭包closure。
小结 在正常的JavaScript执行中无法立即回收的内存有闭包和全局变量引用这两种情况。由于V8的内存限制要十分小心此类变量是否无限制地增加因为它会导致老生代中的对象增多。
六、理解 Buffer
Buffer是一个像Array的对象但它主要用于操作字节。下面我们从模块结构和对象结构的层面上来认识它。
1、Buffer结构
模块结构 Buffer 是一个典型的JavaScript与C结合的模块它将性能相关部分用C实现将非性能相关的部分用JavaScript实现。
Buffer所占用的内存不是通过V8分配的属于堆外内存。由于V8垃圾回收性能的影响将常用的操作对象用更高效和专有的内存分配回收策略来管理是个不错的思路。
由于 Buffer 太过常见Node 在进程启动时就已经加载了它并将其放在全局对象global上。所以在使用Buffer时无需通过 require() 即可直接使用。
2、Buffer的转换
3、Buffer的拼接
4、Buffer与性能