設計模式---001單例模式(轉載自個人老師)

00一、單例模式概念瀏覽器

複製代碼
在說單例模式的概念的時候咱們先來說下瀏覽器的迴流和重繪
    
     一、瀏覽器把獲取到的HTML代碼會解析成一個DOM樹,HTML中的每個元素都是DOM樹的一個節點,根節點也就是咱們長用的document對象

     二、當渲染樹中的一部分或者所有由於元素的尺寸、佈局、隱藏等改變而須要從新構建的時候,這時候就會發生迴流。每一個頁面都至少發生一次迴流,也就是頁面第一次加載的時候。在迴流的時候,瀏覽器會使渲染樹中受到影響的元素部分失效,並從新繪製這個部分的渲染樹,完成迴流之後,瀏覽器會從新繪製受到影響的部分元素到屏幕中,這個過程就是重繪

     三、當渲染樹中的一些元素須要一些更新屬性的時候,而這些屬性只會影響外觀、風格、而不影響佈局的就成爲重繪

     從以上的概念中能夠得知:迴流一定發生重繪。可是重繪不必定引發迴流
     

     簡單的說迴流會致使頁面的重排,這樣會嚴重影響性能


何時會發生迴流?
     一、添加或者刪除可見的DOM元素的時候

     二、元素的位置發生改變

     三、元素尺寸改變

     四、內容改變

     五、頁面第一次渲染的時候


單例模式:保證系統中,使用該模式的類只有一個實例
複製代碼

 00二、傳統寫法佈局

複製代碼
假設咱們要建立一個DIV而後在插到頁面當中去,若是第一次咱們沒有這個div的時候咱們須要建立一個,可是若是咱們已經建立了一次後,第二次在調用這個方法的時候咱們還須要在次建立一個嗎?

換一個思路來想咱們平時用的alert()方法。當咱們每次調用alert方法的時候難到系統對象會每次都建立出來一個div嗎?剛纔我們也說過了,迴流會嚴重的影響性能。那咱們應該如何去作呢?

傳統寫法:

 

從上面這個栗子中咱們能夠看出 咱們每次調用這個方法都會建立一個div,而建立每次建立出來這個DIV都不是同一個DIV。說白一點,createDiv就至關於一個班級,每次建立一個div的時候 就意味着從這個班級出來的人都是不一樣的。這樣的作法太浪費性能。若是當咱們第一次建立出來一個div的時候,下次咱們作一個判斷,若是有這個div了那麼咱們就直接用這個div。沒有的話咱們在去建立一個。這樣咱們是否是就能夠大大提升性能了?

 

方法二:

 

  方法三:性能

  

 

 
複製代碼
相關文章
相關標籤/搜索