頁面渲染 簡化paint複雜程度和區域

2022-09-06 02:30:13 字數 1589 閱讀 4796

paint是填充畫素並且最後合成在使用者的螢幕上的過程。

通常是在管道中耗費最大的,你要盡可能的避免使用paint。

如果你觸發了layout你就一定觸發了paint,因為改變元素的幾何形狀意味著元素的畫素需要修改。

你可以觸發paint如果你改變了不是幾何性質的屬性,例如background,text color,亦或shadow。

在這些情況下layout將不會被觸發,管道看上去像下面這樣:

在chrome devtools中的console欄目選中rendering,勾選show paint rectangels

注意上面的鉤鉤選擇之後將會導致chrome將會捕捉paint發生的地方,並用綠色表示。

如果有些地方你認為不應該發生paint,那麼你可以深入優化。

現在,你需要做recording。recording結束之後選擇一幀,在下面的summary中點選paint profiler,如下圖:

點選之後你可以看見**被paint了,這個paint花費了多長時間和這個paint呼叫的individual paint 。

上面檢測方法讓你同時檢測了paint的複雜度和paint的區域。

你可以根據結果來優化。

paint不總是在在記憶體中paint成一張image。事實上,瀏覽器paint成多張image,亦或多張合成器層(compositor layers),如果有必要的話。

好處是元素被再次paint亦或在螢幕上使用transform屬性進行移動時,可以不影響其他元素。

這就像繪畫軟體sketch,gimp亦或photoshop,乙個層中進行的操作不會影響另乙個層,所有的層乙個接著乙個相互結合並建立除了最後的。

建立新的層的最好方式是使用css屬性will-change。 在chrome和opera和firefox瀏覽器中起作用,並且因為will-change屬性值transform,將會建立乙個新的構造器層。

.moving-element
對於不支援will-change屬性的瀏覽器,但是為了建立layer,所以你必須(誤)用3d transform來強迫建立乙個新的layer,適用於safari和mobile safari等。

.moving-element
注意不要建立太多的layer,因為乙個layer既佔記憶體也需要管理。如果你提公升了元素(promote a element)來建立新的層,使用devtools來確定這樣做將會給你乙個效能上的提公升。

不要不進行檢測就直接提公升元素。

對paint而言巨大的挑戰就是瀏覽器將兩個需要paint的元素結合在一起,而且這將會導致整個螢幕被重新paint。

所以,盡可能減少paint區域。

當談到paint的時候,有些行為消耗很大。

比如,任何包含模糊效果(例如乙個陰影)**將會比畫乙個紅色的box花費更長時間。

css中的background:red和box-shadow:0,4px,4px,rgba(0,0,0,0.5)在執行上對效能有很大不同的影響。

上面paint profiler允許你決定你為了達到最終相同的結果,你是否需要替換已有方案來達到最優性能:你要在動畫中盡量變paint操作,且每一幀的paint都會大於10ms,特別是在移動手機上將會耗時更多。

複雜電路簡化經典例題 複雜電路簡化練習題

1 複雜電路簡化練習題 一 單選題 共10道,每道10分 1.如圖所示電路,開關s閉合後,電壓表v1的示數為3.8v,v2的示數為6v。則燈l1兩端電壓和電源電壓分別是 a.2.2v 6vb.3.8v 6vc.2.2v 3.8vd.6v 2.2v2.如圖 a 所示電路中,當閉合開關後,兩個電壓表指標...

關於頁面渲染

最近在學習公司的產品時發現在開啟報表設計頁面時,頁面的渲染和載入較慢.於是我想到了關於頁面渲染的優化.下面是關於如何優化頁面渲染的建議 一,寫出高效的css 首先弄清瀏覽器解析html 的過程 構建乙個dom樹,頁面要顯示的各元素都會建立到這個dom樹當中。每當乙個新元素加入到這個dom樹當中,瀏覽...

頁面渲染流程

1.瀏覽器把獲取到的html 解析成1個dom樹,html中的每個tag都是dom樹中的1個節點,根節點就是我們常用的document物件。dom樹里包含了所有html標籤,包括display none隱藏,還有用js動態新增的元素等。2.瀏覽器把所有樣式 使用者定義的css和使用者 解析成樣式結構...