00一、單例模式概念瀏覽器
在說單例模式的概念的時候咱們先來說下瀏覽器的迴流和重繪 一、瀏覽器把獲取到的HTML代碼會解析成一個DOM樹,HTML中的每個元素都是DOM樹的一個節點,根節點也就是咱們長用的document對象 二、當渲染樹中的一部分或者所有由於元素的尺寸、佈局、隱藏等改變而須要從新構建的時候,這時候就會發生迴流。每一個頁面都至少發生一次迴流,也就是頁面第一次加載的時候。在迴流的時候,瀏覽器會使渲染樹中受到影響的元素部分失效,並從新繪製這個部分的渲染樹,完成迴流之後,瀏覽器會從新繪製受到影響的部分元素到屏幕中,這個過程就是重繪 三、當渲染樹中的一些元素須要一些更新屬性的時候,而這些屬性只會影響外觀、風格、而不影響佈局的就成爲重繪 從以上的概念中能夠得知:迴流一定發生重繪。可是重繪不必定引發迴流 簡單的說迴流會致使頁面的重排,這樣會嚴重影響性能 何時會發生迴流? 一、添加或者刪除可見的DOM元素的時候 二、元素的位置發生改變 三、元素尺寸改變 四、內容改變 五、頁面第一次渲染的時候 單例模式:保證系統中,使用該模式的類只有一個實例
00二、傳統寫法佈局
假設咱們要建立一個DIV而後在插到頁面當中去,若是第一次咱們沒有這個div的時候咱們須要建立一個,可是若是咱們已經建立了一次後,第二次在調用這個方法的時候咱們還須要在次建立一個嗎? 換一個思路來想咱們平時用的alert()方法。當咱們每次調用alert方法的時候難到系統對象會每次都建立出來一個div嗎?剛纔我們也說過了,迴流會嚴重的影響性能。那咱們應該如何去作呢? 傳統寫法:
從上面這個栗子中咱們能夠看出 咱們每次調用這個方法都會建立一個div,而建立每次建立出來這個DIV都不是同一個DIV。說白一點,createDiv就至關於一個班級,每次建立一個div的時候 就意味着從這個班級出來的人都是不一樣的。這樣的作法太浪費性能。若是當咱們第一次建立出來一個div的時候,下次咱們作一個判斷,若是有這個div了那麼咱們就直接用這個div。沒有的話咱們在去建立一個。這樣咱們是否是就能夠大大提升性能了?
方法二:
方法三:性能