」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 掌握 Web 動畫:CSS 與未優化和優化的 JavaScript 效能

掌握 Web 動畫:CSS 與未優化和優化的 JavaScript 效能

發佈於2024-08-30
瀏覽:774

網頁動畫可以顯著改善使用者體驗,但如果實施不仔細,也會影響網站效能。在本文中,我將比較三種不同的方法來對大小脈衝的圓形元素進行動畫處理。我將使用 CSS、未優化的 JavaScript 和優化的 JavaScript,並且我將向您展示如何使用 Chrome DevTools 來衡量它們的效能。

網頁動畫簡介

動畫是現代網頁設計的關鍵部分。它們可以使用各種方法來實現,最常見的是使用純 CSS 或 JavaScript。然而,並非每種方法都表現得一樣好。為了證明這一點,我決定測試三種不同的方法:

  • 使用 CSS 創建的動畫。
  • 使用 JavaScript 未優化的動畫。
  • 使用 JavaScript 和 requestAnimationFrame 優化動畫。

設定項目

此專案可在 GitHub 上取得。您可以輕鬆下載並試用。

git 克隆 https://github.com/TomasDevs/animation-performance-test.git
cd 動畫效能測試

下載後,檢查資料夾 css-animationjs-animation-optimizedjs-animation-unoptimized

在 GitHub 上嘗試此專案

衡量績效

為了測量效能,我使用了 Chrome DevTools 的效能面板。每個動畫運行 10 秒。

績效結果與分析

CSS動畫

Mastering Web Animations: CSS vs Unoptimized and Optimized JavaScript Performance來源:由 TomasDevs 創建 (2024)

  • 總阻塞時間: 390 ms

筆記:
CSS 動畫往往表現得更好,因為它們被卸載到瀏覽器的本機渲染引擎,特別是在使用變換或不透明度等屬性時。該動畫非常高效,對腳本和渲染時間的影響最小。


優化的 JavaScript 動畫

Mastering Web Animations: CSS vs Unoptimized and Optimized JavaScript Performance來源:由 TomasDevs 創建 (2024)

  • 總阻塞時間: 400 ms

筆記:
最佳化的 JS 版本使用 requestAnimationFrame 和平滑的正弦波函數來管理動畫。雖然它比 CSS 動畫需要更多的腳本編寫時間,但它仍然運行得相當高效,並保持較低的渲染和繪製時間。


未優化的 JavaScript 動畫

Mastering Web Animations: CSS vs Unoptimized and Optimized JavaScript Performance來源:由 TomasDevs 創建 (2024)

  • 總阻塞時間: 440 ms

筆記:
未最佳化的 JS 版本使用簡單的循環,沒有考慮時序進展。由於動畫每一幀的計算效率低下,這會導致腳本、渲染和繪畫時間更長。


結論

  • CSS 動畫 對於簡單動畫來說整體來說效率最高。它們受益於瀏覽器的硬體加速並減少主線程的負載。
  • 優化的 JavaScript 動畫緊追在後。當您需要對動畫進行更多動態控制時,使用 requestAnimationFrame 進行最佳化對於確保流暢的效能至關重要。
  • 未優化的 JavaScript 動畫表現最差,因為運算效率低下,它們給瀏覽器的渲染引擎帶來了不必要的壓力。

加入討論

您在優化網頁動畫方面有哪些經驗?您還有其他提高效能的提示或技巧嗎?請在下面的評論中告訴我!

版本聲明 本文轉載於:https://dev.to/tomasdevs/mastering-web-animations-css-vs-unoptimized-and-optimized-javascript-performance-4knn?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 馴服電子郵件野獸:我的收件匣管理人工智慧之旅
    馴服電子郵件野獸:我的收件匣管理人工智慧之旅
    是否曾经感觉您的收件箱是一个数字九头蛇,为您回复的每个人发送两封新电子邮件? ??好吧,科技爱好者们,我决定用秘密武器来对付这个怪物:人工智能! ??️ 尤里卡时刻 想象一下:现在是凌晨 3 点,我周围都是空咖啡杯☕☕☕,盯着一个数量可与国会图书馆相媲美的收件箱。就在那时,我突然想到...
    程式設計 發佈於2024-11-06
  • 為什麼 Go 是智能合約開發的新競爭者
    為什麼 Go 是智能合約開發的新競爭者
    区块链生态系统迅速发展,引入了创新的解决方案和平台,扩展了分布式账本技术的潜力。这项创新的核心是智能合约——自动执行的程序,无需中介即可自动执行协议。传统上,Solidity 一直是编写智能合约的首选语言,尤其是以太坊区块链。 Solidity 旨在在以太坊虚拟机 (EVM) 中运行,为开发人员提供...
    程式設計 發佈於2024-11-06
  • 如何在等待執行緒完成時保持 tkinter GUI 回應?
    如何在等待執行緒完成時保持 tkinter GUI 回應?
    等待線程完成時凍結/掛起tkinter GUI在Python 中使用tkinter GUI 工具包時遇到的常見問題執行某些操作時介面凍結或掛起。這通常是由於在主事件循環中使用了阻塞操作,例如加入執行緒。 瞭解 tkinter Mainlooptkinter mainloop() 是負責處理使用者輸入...
    程式設計 發佈於2024-11-06
  • C 和 C++ 中條件運算子的行為有什麼不同?
    C 和 C++ 中條件運算子的行為有什麼不同?
    條件運算子:剖析C 與C 的差異在程式設計領域,條件運算子(?:) 充當計算表達式並根據結果傳回特定值的簡潔方法。雖然此運算符在 C 和 C 中的操作類似,但出現了一個微妙的區別,可能會影響程式碼執行。 C:對左值的限制在 C 中,條件運算子會對傳回左值(駐留在特定記憶體位址的變數)施加限制。這表示...
    程式設計 發佈於2024-11-06
  • Java中如何有效率地檢查字串中是否存在某個字元?
    Java中如何有效率地檢查字串中是否存在某個字元?
    高效字串字元驗證在Java中,一個常見的任務是判斷某個特定字元是否出現在字串中。雖然傳統方法涉及遍歷字串,但利用 indexOf() 的有效替代方法消除了循環的需要。 IndexOf() 逐個字元掃描字串,並傳回指定字元所在的第一個實例的索引出現。如果該字元不存在,則傳回值 -1。 考慮檢查字元「a...
    程式設計 發佈於2024-11-06
  • 如何使用 PHP 為圖片添加浮水印?
    如何使用 PHP 為圖片添加浮水印?
    使用PHP 向圖像添加浮水印如果您正在使用允許用戶上傳圖像的網站,則可能需要添加這些圖像的浮水印,以防止未經授權的使用。添加浮水印可確保您的徽標或品牌在每個上傳的圖像上都可見。以下是如何在PHP 中實現此目的:使用PHP 函數PHP 手冊提供了使用以下函數的綜合範例:imagecreatefromp...
    程式設計 發佈於2024-11-06
  • 如何抑制 Tensorflow 調試輸出?
    如何抑制 Tensorflow 調試輸出?
    抑制Tensorflow調試信息Tensorflow可能會在初始化時在終端中顯示調試信息,包括加載的庫和發現的設備。雖然此資訊對於偵錯目的很有用,但它也會使控制台混亂並使追蹤重要訊息變得困難。 要停用此偵錯訊息,您可以使用 os.environ 模組:import os os.environ['TF...
    程式設計 發佈於2024-11-06
  • 如何確定我的 MySQL 查詢是否利用了索引?
    如何確定我的 MySQL 查詢是否利用了索引?
    識別 MySQL 索引的效能優化 MySQL 查詢時,評估索引的有效性至關重要。 取得索引效能指標要確定您的查詢是否使用索引,請執行下列查詢:EXPLAIN EXTENDED SELECT col1, col2, col3, COUNT(1) FROM table_name WHERE col1...
    程式設計 發佈於2024-11-06
  • 如何更改 WAMP/MySQL 中錯誤訊息的語言?
    如何更改 WAMP/MySQL 中錯誤訊息的語言?
    WAMP/MySQL 中的語言錯誤WAMP/MySQL 中的語言錯誤許多用戶都遇到WAMP/MySQL 中的錯誤未以正確的語言顯示的問題。多次重新安裝WAMP並蒐索大量資源後,該問題仍然存在。 要解決此問題,需要修改my.ini檔案。 修改my.ini檔案# Change your locale h...
    程式設計 發佈於2024-11-06
  • Item - 傳回空集合或陣列而不是 null
    Item - 傳回空集合或陣列而不是 null
    不回傳 null: 傳回 null 取代空集合或陣列的方法需要額外的客戶端處理以避免異常。 null 問題: 客戶端需要新增冗餘檢查(如果要檢查null)。 這些檢查中的遺漏可能會被忽視,從而導致錯誤。 傳回集合或陣列的方法很難實現。 反對 null 的參數: 不要擔心分配空集合或陣列的效...
    程式設計 發佈於2024-11-06
  • 節點 JS || Epress js ||作者:穆尼塞卡·烏達瓦拉帕蒂
    節點 JS || Epress js ||作者:穆尼塞卡·烏達瓦拉帕蒂
    Express js 編寫簡單的express js應用程式 npm 初始化 npm 安裝 Express const express=require('expreass'); const app=express(); app.use('/',(req,res,next)=>{ rse...
    程式設計 發佈於2024-11-06
  • 嵌套括號可以在沒有遞歸或平衡組的情況下匹配嗎?
    嵌套括號可以在沒有遞歸或平衡組的情況下匹配嗎?
    在沒有遞歸或平衡組的情況下匹配嵌套括號使用正則表達式匹配嵌套括號可能具有挑戰性,特別是在像Java 這樣的語言中,其中遞歸且不支援平衡組。幸運的是,使用前向引用確實可以克服此限制。 匹配外部組以下正則表達式[1] 匹配外部組括號而不對深度施加限制:(?=\()(?:(?=.*?\((?!.*?\1)...
    程式設計 發佈於2024-11-06
  • 使用 TDD 方法論和 PostgreSQL 使用 Django 建立完整部落格應用程式的指南(部分安全使用者身份驗證)
    使用 TDD 方法論和 PostgreSQL 使用 Django 建立完整部落格應用程式的指南(部分安全使用者身份驗證)
    Welcome back, everyone! In the previous part, we established a secure user registration process for our Django blog application. However, after succes...
    程式設計 發佈於2024-11-06
  • 如何寫出更好的 CSS
    如何寫出更好的 CSS
    為了為網站樣式編寫更好的CSS,您必須先學習三件事,即響應式設計,您的程式碼可維護和可擴展,並且具有執行性。 響應式設計就是確保您的網站在每種可能的螢幕尺寸上都具有完美的外觀和行為。隨著螢幕尺寸的不斷增加,響應式設計是每個前端開發人員必須學習和掌握的基本概念。 您編寫的程式碼必須以其他開發人員也...
    程式設計 發佈於2024-11-06
  • 解鎖 JavaScript 的超能力:變數的魔力
    解鎖 JavaScript 的超能力:變數的魔力
    從今天開始,我們將發現一個編程的世界。 你擁有超能力的世界。是的,你沒看錯,超能力。如果不是超能力,那又是什麼?使用 JavaScript,您可以讓物體飛行、移動、消失、改變顏色,並在數英里之外看到您的朋友,而這只是可能的一小部分。是的,一切都在你的螢幕上,但仍然非常令人興奮。 像任何超級英雄一樣...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3