本文節選自蒂芙尼·布朗撰寫的《CSS大師》一書。該書在全球各大書店有售,您也可以在此處購買電子書版本。
CSS中某些屬性和值會觸發重排(reflow),這代價高昂,可能降低用戶界面的響應速度——頁面渲染、動畫流暢度和滾動性能都會受到影響,尤其是在手機和平板電視等低功耗設備上。
什麼是重排? {.title}
重排是指任何更改頁面部分或全部佈局的操作。例如,更改元素的尺寸或更新其左側位置。它們會導致瀏覽器重新計算文檔中其他元素的高度、寬度和位置。
重繪(repaint)與重排類似,都會強制瀏覽器重新渲染文檔的一部分。例如,當鼠標懸停在按鈕上時更改其顏色就是一個重繪操作。重繪比重排影響較小,因為它不會影響節點的尺寸或位置;但是,重繪也應盡量減少。
重排和重繪通常由DOM操作觸發,例如添加或刪除元素。但它們也可能由影響元素尺寸、可見性或位置的屬性更改引起。無論更改是由JavaScript還是基於CSS的動畫引起的,情況都是如此。
注意:頁面加載{.title}
頁面加載時,瀏覽器解析初始HTML、CSS和JavaScript,始終會觸發重排和重繪。
要完全避免項目中的重繪和重排是困難的。但是,我們可以使用時間線工具來識別它們並減少它們的影響。
時間線工具{.title}
時間線工具起初可能有點令人困惑。它們測量前端的性能,記錄各種任務完成所需的時間。通過在與頁面交互時記錄活動,我們可以找出哪些CSS代碼可能導致性能瓶頸。
要使用時間線,請點擊開發者工具界面中的時間線選項卡。在Chrome、Opera和Firefox中,它被恰當地命名為“時間線”。 Safari將其命名為複數形式“時間線”。 Internet Explorer 11 使用更具描述性的名稱“UI響應能力”。 [9]
在任何瀏覽器中,按“記錄”按鈕開始記錄過程。與頁面有問題的部分交互,完成後,單擊相應的按鈕停止記錄。
根據您使用的瀏覽器,您可能會立即看到數據,或者在停止記錄後看到數據。 Safari和Firefox實時顯示數據,而Chrome、Opera和Internet Explorer在您停止記錄後呈現性能圖表。
文檔加載、函數調用、DOM事件、樣式重新計算和繪製操作都會在每個瀏覽器中記錄,從而讓我們概述性能瓶頸。就CSS性能而言,我們至少要關注兩個相關的方面:
- 大量的樣式重新計算和繪製操作
- 耗時較長的操作,時間線中較大的塊表示
為了了解實際情況,我們將比較兩個基本文檔,示例A和示例B。在這兩種情況下,我們都將一系列div{.literal}元素從x位置0移動到x位置1000。兩個示例都使用CSS轉換。但是,在示例A中,我們將對left
屬性進行動畫處理。在示例B中,我們將使用轉換變換並對transform
屬性進行動畫處理。
兩個示例的標記相同(結果如圖3.16所示):
<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="utf-8"> <title>Performance example</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <button type="button" id="move">Move</button> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <🎜> </body> </html>
moved
類:
var move = document.getElementById('move'); move.addEventListener('click', function(e) { var objs = document.body.querySelectorAll('div'); Array.prototype.forEach.call(objs, function(o){ o.classList.toggle('moved'); }); });
我們的CSS代碼是兩者不同的部分。示例A使用的CSS如下:
div { background: #36f; margin-bottom: 1em; width: 30px; height: 30px; position: relative; left: 0; transition: left 2s ease-in; } .moved { left: 1000px; }
觸發後,此動畫將在我們的時間線中生成大量樣式計算和重繪指示器。下面的圖片顯示了Safari(圖3.17)、Chrome(圖3.18)、Internet Explorer(圖3.19)和Firefox(圖3.20)中此轉換的時間線輸出。
left
。 left
屬性在更改時會觸發重排,即使更改是由動畫或轉換引起的也是如此。
現在,讓我們看一下示例B的CSS:
div { background: #f3f; margin-bottom: 1em; width: 30px; height: 30px; position: relative; left: 0; transition: transform 2s ease-in; transform: translateX(0); } .moved { transform: translateX(1000px); }
在這裡,我們使用轉換並在translateX(0)
和translateX(1000px)
之間進行轉換。
在大多數瀏覽器中,轉換不會觸發重排,我們的時間線將包含更少的重繪操作。這在Safari(圖3.21)、Chrome(圖3.22)和Internet Explorer(圖3.23)中很明顯。 Firefox是例外;比較圖3.20和圖3.24。左側轉換和轉換變換的時間線非常相似。
-webkit-transform
屬性轉換的時間線輸出transform
屬性的相同輸出transform
屬性轉換的時間線輸出
不幸的是,沒有明確的列表說明哪些屬性會導致重排和重繪。 Paul Lewis的CSS Triggers最接近,但它是Chrome專用的。但是,瀏覽器對於許多這些屬性的行為確實相似,因此此資源至少可以讓您了解哪些屬性可能導致問題。
一旦您知道哪些屬性可能有問題,下一步就是測試假設。使用註釋或添加臨時x-
前綴來禁用該屬性,然後重新運行時間線測試。
請記住,性能是相對的,而不是絕對的或完美的。目標是改進:使其性能比以前更好。如果屬性或效果的性能慢到無法接受,則將其完全刪除。
以上是調試UI響應的CSS的詳細內容。更多資訊請關注PHP中文網其他相關文章!

對於Astro,我們可以在構建過程中生成大部分網站,但是有一小部分服務器端代碼可以使用Fuse.js之類的搜索功能來處理搜索功能。在此演示中,我們將使用保險絲搜索一組個人“書籤”


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1
好用且免費的程式碼編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。