设计模式---001单例模式(转载自个人老师)

00一、单例模式概念浏览器

复制代码
在说单例模式的概念的时候咱们先来说下浏览器的回流和重绘
    
     一、浏览器把获取到的HTML代码会解析成一个DOM树,HTML中的每个元素都是DOM树的一个节点,根节点也就是咱们长用的document对象

     二、当渲染树中的一部分或者所有由于元素的尺寸、布局、隐藏等改变而须要从新构建的时候,这时候就会发生回流。每一个页面都至少发生一次回流,也就是页面第一次加载的时候。在回流的时候,浏览器会使渲染树中受到影响的元素部分失效,并从新绘制这个部分的渲染树,完成回流之后,浏览器会从新绘制受到影响的部分元素到屏幕中,这个过程就是重绘

     三、当渲染树中的一些元素须要一些更新属性的时候,而这些属性只会影响外观、风格、而不影响布局的就成为重绘

     从以上的概念中能够得知:回流一定发生重绘。可是重绘不必定引发回流
     

     简单的说回流会致使页面的重排,这样会严重影响性能


何时会发生回流?
     一、添加或者删除可见的DOM元素的时候

     二、元素的位置发生改变

     三、元素尺寸改变

     四、内容改变

     五、页面第一次渲染的时候


单例模式:保证系统中,使用该模式的类只有一个实例
复制代码

 00二、传统写法布局

复制代码
假设咱们要建立一个DIV而后在插到页面当中去,若是第一次咱们没有这个div的时候咱们须要建立一个,可是若是咱们已经建立了一次后,第二次在调用这个方法的时候咱们还须要在次建立一个吗?

换一个思路来想咱们平时用的alert()方法。当咱们每次调用alert方法的时候难到系统对象会每次都建立出来一个div吗?刚才我们也说过了,回流会严重的影响性能。那咱们应该如何去作呢?

传统写法:

 

从上面这个栗子中咱们能够看出 咱们每次调用这个方法都会建立一个div,而建立每次建立出来这个DIV都不是同一个DIV。说白一点,createDiv就至关于一个班级,每次建立一个div的时候 就意味着从这个班级出来的人都是不一样的。这样的作法太浪费性能。若是当咱们第一次建立出来一个div的时候,下次咱们作一个判断,若是有这个div了那么咱们就直接用这个div。没有的话咱们在去建立一个。这样咱们是否是就能够大大提升性能了?

 

方法二:

 

  方法三:性能

  

 

 
复制代码
相关文章
相关标签/搜索