迴流與重繪補充

本文中提到的上文請參考:迴流與重繪

本人前一陣子開發了一套頁面比較複雜的應用,在高級瀏覽器裏面表現良好,非常順暢,但是放到低版瀏覽器(如IE8、7、6)裏面,就變得非常沉重了。花了很長時間測試,這個問題確實頭疼不已。起初以爲是程序問題,然後就針對程序進行了調優和排查,消耗了挺長時間。

頁面比較複雜。用戶頻繁操作的部分是用的Table元素,在td中有嵌套多層元素。

首先我猜想是因爲CSS樣式的寫法問題,就把所有CSS文件內容都刪除了,但操作速度依然很慢(注意,不是頁面加載速度)。然後開始針對js腳本逐步排查。一步步的註釋可能影響性能的代碼。終於,最後發現只要在Table中點擊某按鈕改變table中某元素樣式或者修改某元素內容的時候,點擊按鈕的速度就變得很慢。

然後就開始逐量減少HTML中DOM的代碼,最後只剩下一個Table。但依然不見效,只要對DOM操作瀏覽器就卡了。然後我就谷歌到了上文,發現可能是因爲迴流和重繪的問題。就想了一個比較變態的方法,每次點擊按鈕時就把這個按鈕的樣式設置爲position:absolute,然後設置好left和top,當然還有z-index。讓元素絕對定位但看起來卻依然保持在其原來的位置,果然,速度一下就提升上來了。但是,把頁面其他DOM元素都補充上來的時候,頁面操作的流暢性一下又下去了。

後來想到上文有提到,儘量避免用table,就花了一段時間把table換成了無序列表。速度果然槓槓的。

總結一下,當頁面元素過多,或元素嵌入過深時,儘量避免用table。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章