享元模式
本文参考了曾探的《JavaScript设计模式与开发实战》。
享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级。享元模式的核心是运用共享技术来有效支持大量细粒度的对象。
如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了。在JavaScript中,浏览器特别是移动端的浏览器分配的内存并不算多,如何节省内存就成了一件非常有意义的事情。
对象池
一个典型的例子就是对象池。对象池维护一个装载空闲对象的池子,如果需要对象的时候,不是直接new,而是转从对象池里获取。如果对象池里没有空闲对象,则创建一个新的对象,当获取出的对象完成它的职责之后,再进入池子等待被下次获取。
示例代码如下:
javascript
var toolTipFactory = (function(){
var toolTipPool = []; // toolTip对象池
return {
create: function() {
// 如果对象池为空
if ( toolTipPool.length === 0 ) {
// 创建一个dom
var div = document.createElement( 'div' );
document.body.appendChild( div );
return div;
} else {
// 如果对象池里不为空
// 则从对象池中取出一个dom
return toolTipPool.shift();
}
},
recover: function( tooltipDom ){
// 对象池回收dom
return toolTipPool.push( tooltipDom );
}
}
})();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23