[技術翻譯]Web網頁內容是如何影響電池使用壽命的?

来源:https://www.cnblogs.com/yzsunlei/archive/2020/01/08/12168800.html
-Advertisement-
Play Games

本周再來翻譯一些技術文章,本次預計翻譯三篇文章如下: "04.[譯]使用Nuxt生成靜態網站" ( "Generate Static Websites with Nuxt" ) "05.[譯]Web網頁內容是如何影響電池功耗的" ( "How Web Content Can Affect Power ...


本周再來翻譯一些技術文章,本次預計翻譯三篇文章如下:

我翻譯的技術文章都放在一個github倉庫中,如果覺得有用請點擊star收藏。我為什麼要創建這個git倉庫?目的是通過翻譯國外的web相關的技術文章來學習和跟進web發展的新思想和新技術。git倉庫地址:https://github.com/yzsunlei/javascript-article-translate

用戶將大部分的網路線上時間花費在移動設備上,其餘的大部分是使用不受限制的攜帶型電腦。對於兩者而言,電池壽命都是至關重要的。在這篇文章中,我們將討論影響電池壽命的因素,以及你作為一名Web開發人員如何使你的頁面更節能,以便用戶可以花更多時間與你的內容互動。

什麼消耗電量?

移動設備上的大部分電量由這幾個主要組件消耗:

  • CPU(主處理器)
  • GPU(圖形處理)
  • 聯網(Wi-Fi和蜂窩無線晶元)
  • 屏幕

屏幕功耗相對恆定,並且大多在用戶的控制下(通過屏幕的開啟時間和亮度),但是其他組件(CPU,GPU和網路硬體)在功耗方面具有很高的動態範圍。

系統會根據當前正在處理的任務來調整CPU和GPU的性能,這些任務當然包括渲染用戶正在使用其Web瀏覽器和其他使用Web內容的應用程式與之交互的網頁。這可以通過打開或關閉某些組件並更改其時鐘頻率來完成。廣義上講,晶元要求的性能越高,其功率效率就越低。硬體可以非常快速地提升到高性能(但是要付出很高的功耗),然後可以迅速返回到更有效的低功耗狀態。

良好用電的一般原則

因此,為了最大程度地延長電池壽命,你需要減少在高功率狀態下花費的時間,並使硬體儘可能多地回到空閑狀態。

對於Web開發人員,需要考慮三種交互狀態:

  • 用戶正在與內容進行交互時。
  • 當頁面位於最前面,但未與之交互時。
  • 頁面不是最前面的內容時。

高效的用戶互動

顯然,在用戶與頁面進行交互時消耗電量是很正常的。你希望頁面快速載入並快速響應觸摸交互。在許多情況下,減少首次渲染時間和與用戶互動的時間的相同優化也將減少功耗。但是,對於在初始頁面載入後繼續載入資源和運行腳本要謹慎。目標應該是儘快回到空閑狀態。通常,運行的JavaScript越少,頁面的效率就越高,因為腳本是在瀏覽器已經完成的佈局和繪製頁面的基礎上工作的。

頁面載入完成後,諸如滾動和點擊之類的用戶交互也將增加硬體功耗(主要是CPU和GPU),這再次有意義,但是請確保在用戶停止交互後立即回到空閑狀態。另外,請嘗試停留在瀏覽器的“快速路徑”上-例如,內置的頁面滾動將比JavaScript中實現的自定義滾動更加節能。

將閑置電源使用率降至零

當用戶不與頁面交互時,請嘗試使頁面使用儘可能少的電量。例如:

儘量減少使用計時器,以免喚醒CPU。嘗試將基於計時器的工作合併為幾個不經常使用的計時器。許多不協調的計時器會頻繁的觸發CPU喚醒,這比將工作收集成更少的塊要糟糕得多。

儘量減少動畫內容,例如動畫圖像和自動播放的視頻。特別要避免“載入”GIF或CSS動畫,這些GIF或CSS動畫會不斷觸發繪製,即使你看不到它們也是如此。IntersectionObserver用於僅可在可見時運行動畫。

儘可能使用聲明性動畫(CSS Animations和Transitions)。當動畫內容不可見時,瀏覽器可以優化這些內容,並且它們比腳本驅動的動畫更有效。

避免進行網路輪詢以從伺服器獲取定期更新。推薦使用具有持久連接的WebSockets或Fetch,而不是輪詢。

在應處於空閑狀態時正在工作的頁面也將對用戶交互的響應降低,因此將後臺活動最小化也可以提高響應速度和電池壽命。

後臺時CPU使用率為零

在多種情況下,頁面變為非活動狀態(不是用戶的焦點時),例如:

  • 用戶切換到其他選項卡。
  • 用戶切換到其他應用程式。
  • 瀏覽器視窗最小化。
  • 瀏覽器視窗是可見的,但不是焦點視窗。
  • 瀏覽器視窗在另一個視窗後面。
  • 視窗所在的空間不是當前空間。

當頁面變為非活動狀態時,WebKit會自動採取動作來節省電量:

  • requestAnimationFrame 已停止。
  • CSS和SVG動畫已暫停。
  • 計時器受到限制。

另外,WebKit會利用操作系統提供的功能來最大化效率:

  • 在iOS上,如果可能,選項卡將完全掛起。
  • 在macOS上,標簽頁會進入App Nap,這意味著未進行視覺更新的標簽頁的Web進程的優先順序較低,並且計時器受到限制。

但是,頁面可以通過計時器(setTimeout和setInterval),消息,網路事件等觸發CPU喚醒。在後臺時,應儘可能避免這些事件。有兩個對此有用的API:

  • Page Visibility API提供了一種方法來響應頁面轉換為後臺還是前臺。這是避免在頁面處於後臺時更新UI的好方法,然後在頁面可見時使用visibilitychange事件來更新內容。
  • blur每當頁面不再處理焦點時,都會觸發事件。在這種情況下,頁面可能仍然可見,但不是當前聚焦的視窗。根據頁面的不同,停止動畫可能是一個好主意。

查找問題的最簡單方法是Web Inspector的時間軸。該記錄不應顯示頁面在後臺時發生的任何事件。

降低網頁耗電

既然我們知道了網頁耗電的主要原因,並給出了一些有關創建節能網頁的一般規則,那麼讓我們來談談如何識別和修複導致耗電量過多的問題。

腳本

如上所述,現代CPU可以將設備閑置時的耗電量從非常低的坡度提高到非常高的水平,以滿足用戶交互和其他任務的需求。因此,CPU成為電池壽命變化的主要原因。頁面載入期間的CPU使用率是瀏覽器引擎在載入,解析和渲染資源以及執行JavaScript時所做的工作的組合。在許多最新瀏覽器的網頁上,執行JavaScript所花費的時間遠遠超過了瀏覽器在其餘載入過程中所花費的時間,因此,最小化JavaScript執行時間將最大程度地降低功耗。

衡量CPU使用率的最佳方法是使用Web Inspector。如我們在上一篇文章中所示,時間軸可以顯示任何選定時間範圍內的CPU活動:

202001050001.png

為了有效地使用CPU,WebKit在可能的情況下將工作分配到多個內核上(使用Workers的頁面也將能夠使用多個內核)。Web Inspector提供了與頁面主線程同時運行的線程的細分。例如,以下屏幕截圖顯示了滾動具有複雜渲染和視頻播放功能的頁面時的線程:

202001050002.png

在尋找要優化的東西時,請專註於主線程,因為那是你的JavaScript運行的地方(除非你使用的是Workers),然後使用“JavaScript And Event”時間軸來瞭解觸發腳本的原因。也許你在響應用戶或滾動事件方面做了太多工作,或者觸發了requestAnimationFrame中隱藏元素的更新。瞭解頁面上使用的JavaScript庫和第三方腳本所完成的工作。要進行更深入的研究,可以使用Web Inspector的JavaScript探查器來查看在哪裡花費時間。

“WebKit線程”中的活動主要是由與JavaScript相關的工作觸發的:JIT編譯和垃圾回收,因此減少運行的腳本數量並減少JavaScript對象的創建和銷毀可以降低這種情況。

WebKit調用的其他各種系統框架都使用線程,因此“其他線程”包括那些線程完成的工作;繪畫是“其他線程”活動中使用最多的,接下來我們將討論繪畫。

繪畫

主線程CPU使用率也可以由大量佈局和繪畫觸發;這些通常是由腳本觸發,但比其他屬性的CSS動畫transform,opacity並且filter還可能導致他們觸發。查看“Layout and Rendering”時間軸將幫助你瞭解導致觸發活動的原因。

如果“Layout and Rendering”時間軸顯示繪畫,但你無法確定正在發生的變化,請啟用“Paint Flashing”:

202001050003.png

這將使這些繪畫用紅色標記突出顯示。你可能需要滾動頁面才能看到它們。請註意,WebKit會保留一些“過度繪製(overdraw)”的圖塊,以實現平滑的滾動,因此在視口中不可見的繪製仍可以繼續工作,以使屏幕外的圖塊保持最新狀態。如果時間軸上顯示繪畫,則說明它在做實際的工作。

除了導致CPU耗電外,繪畫通常還會觸發GPU工作。macOS和iOS上的WebKit使用GPU進行繪畫,因此觸發繪畫可能會導致功耗顯著增加。額外的CPU使用率通常會顯示在CPU使用率時間軸的“其他線程”下。

GPU還用於2D畫布和WebGL/WebGPU。為了最大程度地減少繪圖,如果畫布內容沒有更改,請不要調用API,並嘗試優化畫布繪圖命令。

許多Mac筆記本電腦有兩個GPU,一個與CPU在同一個晶元上的“集成”GPU,功能不強但功耗更高,還有一個功能更強大但功耗更高的“獨立”GPU。WebKit預設情況下將使用集成GPU。你可以使用powerPreference上下文創建參數請求獨立GPU ,但是只有在你可以證明功耗成本合理的情況下,才可以這樣做。

網路

無線網路會以你意想不到的方式影響電池壽命。手機受到的影響最大,因為它們結合了功能強大的射頻(WiFi和蜂窩網路晶元)和較小的電池。不幸的是,在實驗室之外測量網路的電源影響並不容易,但是可以通過遵循一些簡單的規則來減少能耗。

減少網路能耗的最直接方法是最大限度地利用瀏覽器的緩存。減少頁面載入時間的所有最佳實踐還通過減少無線電的開機時間而使電池受益。

另一個重要方法是將網路請求組合在一起。每當有新請求出現時,操作系統就需要打開無線電,連接到基站或蜂窩塔並傳輸位元組。傳輸完數據包後,如果需要繼續傳輸更多數據包,無線電將保持少量供電。

如果頁面頻繁地傳輸少量數據,則開銷可能大於傳輸數據所需的能量:

202001050004.png

傳輸2個數據包之間有延遲的網路功率開銷,可以從“Network Requests”時間線中的Web檢查器中發現此類問題。例如,以下屏幕截圖顯示了在幾秒鐘內發送的四個單獨的請求(可能是分析):

202001050005.png

同時發送所有請求將提高網路用電效率。

結論

網頁可以成為電池壽命的好公民。

衡量Web Inspector中的電池影響並降低這些能耗很重要。這樣做可以改善用戶體驗並且延長電池壽命。

延長電池壽命的最直接方法是最大程度地減少CPU使用率。新的Web Inspector提供了一種可以隨時間進行監視的工具。

為了達到更長的電池壽命,目標是:

  • 空閑時將CPU使用率降至零
  • 在用戶交互過程中最大化性能,以快速恢復閑置狀態

原文鏈接:https://webkit.org/blog/8970/how-web-content-can-affect-power-usage/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...