享元模式(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条数据再插入到页面上,提升性能。