css重繪和重排會iphone微信瀏覽器閃退

2021-07-05 23:51:52 字數 980 閱讀 6883

1.專案背景

圖1

圖2

2.問題

當內容很少的時候,沒出現什麼問題,當內容變多(大概乙個頁面長到差不多100屏左右的時候),iphone端會出現閃退bug,andorid端則正常顯示,桌面端也沒出現什麼效能問題。

3.原因

仔細的檢查了**,排查問題出現的原因:

1.http請求過多

2.手工模板效率問題

3.做移動適配時候,js操作dom使得瀏覽器發生過多的重繪和重排(當前元素重排引發後面一系列相關元素的重排),引發閃退

4.分析

做了許多實驗來測試蘋果手機閃退的原因,發現剛才提到的原因3是主要的原因。原因1和原因2都是專案中可以優化的地方。

原因3,

3.1 實驗排查發現,產生閃退的原因在操作外層dom 寬度時候引起的

$(".main").css("width", 700 * zoom + "px");
html:

.....

3.2 因為實驗內容是臨近閃退的臨界值,所以能發現許多能引發css重排而產生效能問題的小細節,如(position:fixed元素如果沒加z-index,會閃退),加了z-index後就不會了。 

4.解決方案

就是要解決原因3.1,暫時想到了乙個方法,繞過縮放.main:

因為.page元素在頁面上看已經縮放到了適當的大小,我給wrap設定了乙個overflow:hidden, .main寬度不用縮,剛剛好。

要徹底**其原因,就得去了解下各種瀏覽器處理css重繪和重排的機理了。

重繪和重排

重繪是乙個元素外觀的改變所觸發的瀏覽器行為,例如改變visibility outline 背景色等屬性。瀏覽器會根據元素的新屬性重新繪製,使元素呈現新的外觀。重繪不會帶來重新布局,並不一定伴隨重排。重排是更明顯的一種改變,可以理解為渲染樹需要重新計算 儘量減少重排次數和縮小重排的影響範圍 1.dom...

重排和重繪

當dom的變化影響了元素的幾何屬性 寬或高 瀏覽器需要重新計算元素的幾何屬性,同時其他元素的幾何屬性和位置也會受到影響。瀏覽器會使渲染樹中受到影響的部分失效,並重新構造渲染樹,這個過程稱為重排。完成重排後,瀏覽器會重新繪製受到影響的部分到螢幕,這個過程稱為重繪。由於瀏覽器的流布局,對渲染樹的計算通常...

重繪和重排

構建dom樹 渲染引擎解析html文件,將所有標籤轉換為dom樹中的dom節點生成內容樹 構建渲染樹 解析對應的css樣式檔案資訊,樣式樹與dom樹結合構建成渲染樹 布局渲染樹 從根節點遞迴呼叫,計算每乙個元素的大小 位置等,給出每個節點所應該在螢幕上出現的精確座標 繪製渲染樹 遍歷渲染樹,使用ui...