00一、单例模式概念浏览器
在说单例模式的概念的时候咱们先来说下浏览器的回流和重绘 一、浏览器把获取到的HTML代码会解析成一个DOM树,HTML中的每个元素都是DOM树的一个节点,根节点也就是咱们长用的document对象 二、当渲染树中的一部分或者所有由于元素的尺寸、布局、隐藏等改变而须要从新构建的时候,这时候就会发生回流。每一个页面都至少发生一次回流,也就是页面第一次加载的时候。在回流的时候,浏览器会使渲染树中受到影响的元素部分失效,并从新绘制这个部分的渲染树,完成回流之后,浏览器会从新绘制受到影响的部分元素到屏幕中,这个过程就是重绘 三、当渲染树中的一些元素须要一些更新属性的时候,而这些属性只会影响外观、风格、而不影响布局的就成为重绘 从以上的概念中能够得知:回流一定发生重绘。可是重绘不必定引发回流 简单的说回流会致使页面的重排,这样会严重影响性能 何时会发生回流? 一、添加或者删除可见的DOM元素的时候 二、元素的位置发生改变 三、元素尺寸改变 四、内容改变 五、页面第一次渲染的时候 单例模式:保证系统中,使用该模式的类只有一个实例
00二、传统写法布局
假设咱们要建立一个DIV而后在插到页面当中去,若是第一次咱们没有这个div的时候咱们须要建立一个,可是若是咱们已经建立了一次后,第二次在调用这个方法的时候咱们还须要在次建立一个吗? 换一个思路来想咱们平时用的alert()方法。当咱们每次调用alert方法的时候难到系统对象会每次都建立出来一个div吗?刚才我们也说过了,回流会严重的影响性能。那咱们应该如何去作呢? 传统写法:
从上面这个栗子中咱们能够看出 咱们每次调用这个方法都会建立一个div,而建立每次建立出来这个DIV都不是同一个DIV。说白一点,createDiv就至关于一个班级,每次建立一个div的时候 就意味着从这个班级出来的人都是不一样的。这样的作法太浪费性能。若是当咱们第一次建立出来一个div的时候,下次咱们作一个判断,若是有这个div了那么咱们就直接用这个div。没有的话咱们在去建立一个。这样咱们是否是就能够大大提升性能了?
方法二:
方法三:性能