搜尋
首頁web前端前端問答css3的動畫性能為什麼高
css3的動畫性能為什麼高Jan 20, 2022 am 10:56 AM
css3動畫

效能高的原因:1、css是關鍵影格動畫,補間動畫部分由瀏覽器完成,瀏覽器可以對動畫進行最佳化;2、程式碼簡單,效能調優方向固定;3、CSS動畫運行在合成線程中,不會阻塞主線程,並且在合成線程中完成的動作不會觸發回流和重繪,從而其渲染成本小。

css3的動畫性能為什麼高

本教學操作環境:windows7系統、CSS3&&HTML5版、Dell G3電腦。

1. 瀏覽器的渲染流程

渲染流程主要有4個步驟

  • 解析HTML 產生DOM 樹

  • 解析CSS 樣式產生CSSOM 樹,CSSOM 樹與DOM 樹結合產生Render tree

  • 佈局Render Tree 對每個節點進行佈局處理,確定在螢幕上的位置

  • 繪製Render Tree,遍歷渲染樹將每個節點繪製出來

為了優化使用者體驗,渲染引擎不會等到HTML 解析完才建立佈局渲染樹

產生DOM 樹

#DOM 樹的建構是一個深度遍歷過程,也就是說只有在所有子節點都建構好後才會去建構目前節點的下一個兄弟節點

產生Render 樹

產生DOM 樹的同時會產生CSSOM樹,根據CSSOM 和DOM 樹建立Render Tree,渲染樹包括顏色,尺寸等顯示屬性的矩形

DOM 樹和Render 樹

css3的動畫性能為什麼高

#2. 回流與重繪

CSS 中至關重要的概念

##回流

#回流也叫

重排,指幾何屬性需要改變的渲染。

每一次的回流都會將網頁內容

重新渲染,只是我們人眼感覺不到有任何變化,但是它確實是會清空頁面的,再從頁面的左上角的第一個像素點從左到右從上到下這樣一點一點渲染,每次回流都會是這樣的過程,只是感覺不到而已

渲染樹的節點改變,影響了該節點的幾何屬性,導致該節點位置發生變化,此時就會觸發瀏覽器回流並重新產生渲染樹。

常見的幾何屬性:佈局,尺寸這些可以用尺子量出來的屬性

    display、float、grid
  • width、padding

重繪

#重繪指更改

外觀屬性而不影響#集合屬性的渲染,類似顏色這些。相較於回流,重繪的作用不會那麼強烈。

渲染樹的節點改變,但不影響該節點的集合屬性,回流對瀏覽器效能的消耗是遠大於重繪的。且回流就必然帶來重繪,而重繪不一定需要回流

外觀屬性

    #clip,background
  • ##text

在介紹完這些知識後我們來聊聊CSS 動畫

3. CSS3 動畫

這裡我們只談論CSS3 的動畫

CSS3 動畫也被稱為補間動畫​​,原因是只需要添加關鍵幀的位置,其他的未定義的幀會被自動生成

因為我們只設置了幾個關鍵幀的位置,所以在進行動畫控制的時候比較困難,不能再半路暫停動畫,或者在動畫過程中添加一些其他操作,都不大容易

但是CSS 動畫也有很多的好處

瀏覽器可以對動畫進行最佳化
  • 幀速不好的瀏覽器,CSS3 可以自然降級相容
  • 程式碼簡單,效能調優方向固定
  • 4. JS 動畫

首先,JS 動畫是逐幀動畫,在時間幀上繪製內容,一幀一幀的,所以他的可再造性很高,幾乎可以完成任何你想要的動畫形式。但由於逐幀動畫的內容不一樣,會增加製作的負擔,佔用較大的資源空間。

但是它也有很多的優勢

細膩的動畫
  • 可控性高
  • 酷高級的動畫
  • #5. CSS 動畫與JS 動畫對比

前面關於CSS 動畫和JS 動畫,都是一些概念性比較強的東西,不看也罷

說了這麼多,到底為什麼CSS動畫要

更有效率

呢?

第一點從實作動畫的複雜度來看,CSS 動畫大多都是補間動畫,而JS 動畫是逐幀動畫。當然這裡我們不談實現的效果

第二點#

編碼的高效,採用JS 去實現的動畫,無論多簡單的動畫,都需要去控制整個過程,當然你可能會說可以採用一些庫來解決這些問題,但是這些庫的實際運行可能要比原生實現的效率要低的多

第三點

性能的高效,在我們前面講到了回流和重繪,如果我們要操作一個元素向右移動,我們可能需要控制dom.style.left 屬性,每次來改變元素的位置,而結合我們所說的,幾何屬性的改變必然會造成回流,回流必然會造成重繪,可想而知如果我們採用JS 來實現動畫,這個代價有多大,這會造成瀏覽器在不斷的計算頁面,從而導致瀏覽器記憶體堆積。同時由於JavaScript 運行在瀏覽器的主執行緒中,主執行緒中還有其他的重要任務在執行,因而可能會受到干擾導致執行緒阻塞,從而丟幀

而CSS 的動畫是運行在合成線程中的,不會阻塞主線程,並且在合成線程中完成的動作不會觸發回流和重繪

當然還有一個重要的點:JS 動畫運行在CPU,而CSS 動畫運行在GPU

總的來說, CSS動畫的渲染成本小,而且它的執行效率高於JavaScript 動畫

(學習影片分享:css影片教學

以上是css3的動畫性能為什麼高的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
什麼是使用效果?您如何使用它執行副作用?什麼是使用效果?您如何使用它執行副作用?Mar 19, 2025 pm 03:58 PM

本文討論了React中的使用效應,這是一種用於管理副作用的鉤子,例如數據獲取和功能組件中的DOM操縱。它解釋了用法,常見的副作用和清理,以防止記憶洩漏等問題。

解釋懶惰加載的概念。解釋懶惰加載的概念。Mar 13, 2025 pm 07:47 PM

懶惰加載延遲內容的加載直到需要,從而通過減少初始加載時間和服務器加載來改善Web性能和用戶體驗。

JavaScript中的高階功能是什麼?如何使用它們來編寫更簡潔和可重複使用的代碼?JavaScript中的高階功能是什麼?如何使用它們來編寫更簡潔和可重複使用的代碼?Mar 18, 2025 pm 01:44 PM

JavaScript中的高階功能通過抽象,常見模式和優化技術增強代碼簡潔性,可重複性,模塊化和性能。

咖哩如何在JavaScript中起作用,其好處是什麼?咖哩如何在JavaScript中起作用,其好處是什麼?Mar 18, 2025 pm 01:45 PM

本文討論了JavaScript中的咖哩,這是一種將多重題材函數轉換為單詞彙函數序列的技術。它探討了咖哩的實施,諸如部分應用和實際用途之類的好處,增強代碼閱讀

反應和解算法如何起作用?反應和解算法如何起作用?Mar 18, 2025 pm 01:58 PM

本文解釋了React的對帳算法,該算法通過比較虛擬DOM樹有效地更新DOM。它討論了性能優勢,優化技術以及對用戶體驗的影響。

什麼是Usecontext?您如何使用它在組件之間共享狀態?什麼是Usecontext?您如何使用它在組件之間共享狀態?Mar 19, 2025 pm 03:59 PM

本文解釋了React中的UseContext,該文章通過避免道具鑽探簡化了狀態管理。它討論了通過減少的重新租賃者進行集中國家和績效改善之類的好處。

您如何防止事件處理程序中的默認行為?您如何防止事件處理程序中的默認行為?Mar 19, 2025 pm 04:10 PM

文章討論了使用DestrestDefault()方法在事件處理程序中預防默認行為,其好處(例如增強的用戶體驗)以及諸如可訪問性問題之類的潛在問題。

受控和不受控制的組件的優點和缺點是什麼?受控和不受控制的組件的優點和缺點是什麼?Mar 19, 2025 pm 04:16 PM

本文討論了React中受控和不受控制的組件的優勢和缺點,重點是可預測性,性能和用例等方面。它建議在選擇之間選擇因素。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

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

Safe Exam Browser

Safe Exam Browser

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

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),