享元模式(Flyweight):运用共享技术有效地支持大量的细粒度的对象,避免对象间拥有相同内容造成多余的开销。
享元模式主要对数据、方法共享分离,它将数据和方法分成内部数据、内部方法和外部数据、外部方法。
内部方法和内部数据指的是相似或者共有的数据和方法,所以将这一部分提取出来减少开销,以提高性能。
例如一个新闻页面的分页效果
//创建一个享元对象
var Flyweight =function(){
//已创建的元素
var created = [];
//创建一个新闻包装容器
function create(){
var dom = document.createElement('div');
//将容器插入新闻列表容器中
document.getElementById('container').appendChild(dom);
//缓存新创建的元素
created.push(dom);
//返回创建的新元素
return dom;
}
return {
//获取创建新闻元素方法
getDiv : function() {
//如果已创建的元素小于当前页面元素总个数,则创建
if(created.length<5){
return create();
}else{
//获取第一个元素并插入到最后面
var div = created.shift();
created.push(div)
return div;
}
}
}
}
提取相似可共享的数据和方法来优化应用
如果使用普通的js实现分页将许多条数据插入在文档中,当数据量大时会造成很大多余开销,导致浏览器卡顿等,使用享元模式,在每触发下一页的时候,只获取当前页的N条数据再插入到页面上,提升性能。