色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS Web頁面加載的原理和優化方法

HarmonyOS開發者 ? 來源:HarmonyOS開發者技術 ? 作者:HarmonyOS開發者技術 ? 2024-12-05 15:14 ? 次閱讀

在移動互聯網時代,應用的頁面渲染速度對于用戶體驗至關重要。相對于原生頁面,Web頁面的性能存在多方面的技術挑戰。本文以HarmonyOS的ArkWeb組件為基礎,介紹了Web頁面加載中的影響因素以及對應的優化方案。

Web頁面加載性能優化指導

Web頁面加載流程

Web頁面加載包含網絡連接、資源下載、DOM解析、JavaScript代碼編譯執行和渲染等關鍵環節,本文主要針對網絡連接、資源下載和完整頁面渲染這些關鍵節點的耗時進行優化。

預啟動Web渲染進程:預啟動Web渲染進程指用戶可以在業務需要的Web頁面啟動前,加載一個空白的Web組件,在至少一個Web組件存活時,Web渲染進程進程會一直存在,節省了用戶后續啟動Web組件拉起渲染進程的時間,加快頁面加載速度。

預解析:預解析指預先對DNS進行解析,可以節省DNS解析的時間,從而優化Web的加載耗時。

預連接:預連接包含預解析的步驟,可以在用戶請求頁面之前提前進行DNS解析和socket連接建立,這樣當用戶真正請求頁面時,服務器和瀏覽器之間已經建立好了連接,可以直接傳輸數據,減少了網絡延遲,提升了頁面加載速度。

預下載:預下載指在頁面加載之前提前下載所需的資源,以避免在頁面加載過程中資源下載導致的阻塞和耗時。通過預下載,可以在瀏覽器加載頁面時,提前獲取到所需的資源如圖片、CSS文件、JavaScript文件等。通過提前下載這些資源,可以避免在頁面加載時因為資源未加載完成而導致頁面渲染延遲的情況發生。通過合理地使用預下載技術,用戶在訪問頁面時可以更快地看到頁面內容,提高整體性能,提升用戶體驗。

預渲染:預渲染指在后臺對需要加載的頁面進行預先渲染,提前完成整個頁面加載的流程。當用戶需要訪問該頁面時,可以直接切換至前臺展示,實現頁面“秒開”的效果。預渲染要求在進行DOM解析、JavaScript執行和頁面渲染之前,已經完成了所需資源的下載工作,否則可能會導致頁面內容不完整或者渲染錯誤的情況。通過預渲染,可以顯著減少用戶等待頁面加載的時間,特別是對于一些需要加載大量資源或者有復雜交互的頁面。

預取POST:預取POST指當即將加載的Web頁面中存在POST請求且POST請求耗時較長時,可對POST請求進行預獲取,消除等待POST請求數據下載完成的耗時,當用戶真正發起POST請求時,進行攔截替換,加快頁面加載速度,提高用戶體驗。

預編譯JavaScript生成字節碼緩存(Code Cache):該方案會將使用到的JavaScript文件編譯成字節碼并緩存到本地,在頁面首次加載時節省編譯時間。

資源攔截替換的JavaScript生成字節碼緩存(Code Cache):該方案會將資源攔截替換場景下的JavaScript文件編譯成字節碼并緩存到本地,節省在頁面非首次加載時的編譯時間。

離線資源免攔截注入:在頁面加載之前,離線資源免攔截注入會將需要使用的圖片、樣式表和腳本資源注入到內存緩存中,節省頁面首次加載時的網絡請求時間。

資源攔截替換加速:在原本的資源攔截替換接口基礎上,資源攔截替換加速支持了ArrayBuffer格式的入參,開發者無需在應用側進行ArrayBuffer到String格式的轉換,可直接使用ArrayBuffer格式的數據進行攔截替換。?


bd6c575c-b1e8-11ef-93f3-92fbcf53809c.png

圖1Web頁面加載流程

由于所有的關鍵點都是建立在預處理的思路上,因此如果用戶實際并未打開預處理的Web頁面,將會造成額外的資源消耗。各優化方法具體的效果、代價和適用場景的對比如下表所示。

優化方法 效果(優化數據僅供參考) 適配難度 影響 適用場景
預啟動Web渲染進程 消除拉起Web渲染進程的耗時,約140ms。 額外的內存、算力。 高概率被使用的Web頁面。
預解析 消除用戶真正啟動的Web網頁域名解析的耗時,約66ms。 可能存在提前解析了用戶未啟動的Web網頁域名。 中高概率被使用的Web頁面。
預連接 消除用戶真正啟動的Web網頁域名解析、網絡連接耗時,約80ms。 可能存在提前連接了用戶未啟動Web網頁資源。 中高概率被使用的Web頁面。
預下載 消除網絡GET請求下載帶來的耗時及阻塞DOM解析、JavaScript執行的耗時,約641ms。 額外的網絡連接、下載、存儲資源。 高概率被使用的Web頁面。
預渲染 能實現頁面“秒開”效果,將頁面加載時延降到最低,約486ms。 額外的網絡連接、下載、存儲和渲染消耗。 超高概率被使用的Web頁面。
預取POST 消除網絡POST請求下載帶來的耗時及阻塞DOM解析、JavaScript執行的耗時,約313ms。 額外的網絡連接、下載、存儲資源。 高概率被使用的Web頁面。
預編譯JavaScript生成字節碼緩存 消除JavaScript編譯的耗時,優化數據根據JS資源大小而定,5.76Mb資源預編譯時約有2915ms收益。 額外的存儲資源。 加載HTTP/HTTPS協議JavaScript的Web頁面,在第一及第二次優化加載性能。
資源攔截替換的JavaScript生成字節碼緩存 消除JavaScript編譯的耗時,優化數據根據JS資源大小而定,2.4Mb資源攔截替換時約有67ms收益。 額外的存儲資源。 加載自定義協議JavaScript的Web頁面,在第三次及之后的時機優化加載性能。
離線資源免攔截注入 消除資源加載到內存的耗時,優化數據根據資源大小而定,25Mb資源注入時約有1240ms收益。 額外的存儲資源。 高概率被使用的資源。
資源攔截替換加速 節省了轉換時間,同時對ArrayBuffer格式的數據傳輸方式進行了優化,優化數據根據資源大小而定,10Kb資源攔截替換時約有20ms收益。 - ArrayBuffer格式的數據傳輸。

預啟動Web渲染進程

?原理介紹

此方案適用于Web頁面啟動場景。開發者需額外創建一個空白的ArkWeb組件,它雖不顯示給用戶,但會提前拉起渲染進程,且該進程在Web組件全部銷毀前與應用側全局共用,可節省后續組件加載時啟動渲染進程的時間。不過,創建此組件會消耗約200Mb內存和算力。 建議在Web頁面啟動前(如應用冷啟動或廣告階段)執行該方案,若冷啟動無法進行,可在空閑時間啟動。

bd814e1e-b1e8-11ef-93f3-92fbcf53809c.png

圖2預啟動Web渲染流程

預解析和預連接優化

原理介紹 如下圖所示,在應用啟動和UIAbility的onCreate生命周期后,Web組件才能進行初始化和運行。在ArkWeb組件運行階段,會經過onAppear、load、onPageBegin、onPageEnd步驟。預解析、預連接優化適用于Web頁面啟動和跳轉場景,例如,應用啟動時需要加載Web首頁。當開發者已經創建一個ArkWeb組件的實例后,可以選擇不同時機對當前ArkWeb組件設置URL并進行預解析、預連接:

如下圖中a節點所示,如果是應用首頁,推薦在ArkWeb組件初始化創建后設置首頁的URL,進行預解析、預連接;

如下圖中b節點所示,如果是應用內頁面,推薦ArkWeb組件onAppear階段設置當前頁面的URL,進行預解析、預連接;

如下圖中c節點所示,當前頁面完成加載后,可以設置用戶下一步可能點擊頁面的URL,進行預解析、預連接,推薦在onPageEnd及后續時機進行。

bd8e9722-b1e8-11ef-93f3-92fbcf53809c.png

圖3預連接優化原理圖

預下載優化

原理介紹

適用于Web頁面啟動和跳轉場景。在ArkWeb組件運行的onPageEnd階段,可設置URL提前下載頁面所需資源,能消除資源下載耗時及對DOM解析和JS代碼編譯執行的阻塞耗時,但會消耗額外流量和內存,適合高頻頁面。預下載行為包括連接和資源下載,耗時可能達700ms以上,預下載完成后當前組件連接關閉,如需下一個頁面預連接需顯式調用接口。

bda95b3e-b1e8-11ef-93f3-92fbcf53809c.png

圖4預下載優化原理圖

預渲染優化

原理介紹

預渲染優化適用于Web頁面啟動和跳轉場景,例如,進入首頁后,跳轉到其他子頁。與預連接、預下載不同的是,預渲染需要開發者額外創建一個新的ArkWeb組件,并在后臺對其進行預渲染,此時該組件并不會立刻掛載到組件樹上,即不會對用戶呈現(組件狀態為Hidden和InActive),開發者可以在后續使用中按需動態掛載。 具體原理如下圖所示,首先需要定義一個自定義組件封裝ArkWeb組件,該ArkWeb組件被離線創建,被包含在一個無狀態的節點NodeContainer中,并與相應的NodeController綁定。該ArkWeb組件在后臺完成預渲染后,在需要展示該ArkWeb組件時,再通過NodeController將其掛載到ViewTree的NodeContainer中,即通過NodeController綁定到對應的NodeContainer組件。預渲染通用實現的步驟如下:

創建自定義ArkWeb組件:開發者需要根據實際場景創建封裝一個自定義的ArkWeb組件,該ArkWeb組件被離線創建。

創建并綁定NodeController:實現NodeController接口,用于自定義節點的創建、顯示、更新等操作的管理。并將對應的NodeController對象放入到容器中,等待調用。

綁定NodeContainer組件:將NodeContainer與NodeController進行綁定,實現動態組件頁面顯示。

bdc32fb4-b1e8-11ef-93f3-92fbcf53809c.png

圖5預渲染優化原理圖

預取POST請求優化

原理介紹

預取POST請求適用于Web頁面啟動和跳轉場景,當即將加載的Web頁面中存在POST請求且POST請求耗時較長時,會導致頁面加載時間增加,可以選擇不同時機對POST請求進行預獲取,消除等待POST請求數據下載完成的耗時,具體有以下兩種場景可供參考: 1、如果是應用首頁,推薦在ArkWeb組件創建后或者提前初始化Web內核后,對首頁的POST請求進行預取,如XComponent.onCreate()、自定義組件的生命周期函數aboutToAppear()。 2、當前頁面完成加載后,可以對用戶下一步可能點擊頁面的POST請求進行預取,推薦在Web組件的生命周期函數onPageEnd()及后續時機進行。

預編譯JavaScript生成字節碼緩存(Code Cache)

原理介紹

預編譯JavaScript生成字節碼緩存適用于在頁面加載之前提前將即將使用到的JavaScript文件編譯成字節碼并緩存到本地,在頁面首次加載時節省編譯時間。

開發者需要創建一個無需渲染的離線Web組件,用于進行預編譯,在預編譯結束后使用其他Web組件加載對應的業務網頁。

資源攔截替換的JavaScript生成字節碼緩存(Code Cache)

原理介紹

對資源攔截替換場景下的JavaScript文件進行編譯和緩存,節省非首次加載時的編譯時間。

bdd74242-b1e8-11ef-93f3-92fbcf53809c.png

圖6 JS資源編譯執行流程 bdf1338c-b1e8-11ef-93f3-92fbcf53809c.png圖7 資源攔截替換后JS資源編譯執行流程 Web組件默認支持HTTP協議的JavaScript生成字節碼緩存,也支持自定義協議的JavaScript生成字節碼緩存,具體步驟如下:

開發者首先需要在Web組件運行前,向Web組件注冊自定義協議。

其次需要攔截自定義協議的JavaScript,設置ResponseData和ResponseDataID。

離線資源免攔截注入

原理介紹

在頁面加載前,將圖片、樣式表和腳本資源注入內存緩存,節省首次加載的網絡請求時間。

說明

開發者需創建一個無需渲染的離線Web組件,用于將資源注入到內存緩存中,使用其他Web組件加載對應的業務網頁。

僅使用HTTP或HTTPS協議請求的資源可被注入進內存緩存。

內存緩存中的資源由內核自動管理,當注入的資源過多導致內存壓力過大,內核自動釋放未使用的資源,應避免注入大量資源到內存緩存中。

正常情況下,資源的有效期由提供的Cache-Control或Expires響應頭控制其有效期,默認的有效期為86400秒,即1天。

資源的MIMEType通過提供的參數中的Content-Type響應頭配置,Content-Type需符合標準,否則無法正常使用,MODULE_JS必須提供有效的MIMEType,其他類型可不提供。

僅支持通過HTML中的標簽加載。

如果業務網頁中的script標簽使用了crossorigin屬性,則必須在接口的responseHeaders參數中設置Cross-Origin響應頭的值為anoymous或use-credentials。

當調用webview.WebviewController.SetRenderProcessMode(web_webview.RenderProcessMode.MULTIPLE)接口后,應用會啟動多渲染進程模式,此方案在此場景下不會生效。

單次調用最大支持注入30個資源,單個資源最大支持10Mb。

資源攔截替換加速

原理介紹

資源攔截替換加速在原本的資源攔截替換接口基礎上新增支持了ArrayBuffer格式的入參,開發者無需在應用側進行ArrayBuffer到String格式的轉換,可直接使用ArrayBuffer格式的數據進行攔截替換。

總結

本文深入探討了Web頁面加載的原理和優化方法,為開發者提供了重要的指導和思路。在當今互聯網時代,用戶對網頁加載速度和體驗要求越來越高,因此頁面加載優化成為開發者必須重視的一環。通過理解Web頁面加載的原理,開發者可以更好地處理頁面加載與優化的相關問題,提升應用的整體質量。

文中提供了預連接、預下載、預渲染、預取POST、預編譯等多種常見的優化方法,指導開發者優化Web頁面的加載速度。這些方法可以有效提高應用流暢度、提升用戶體驗。

綜上所述,Web頁面加載優化對于提升用戶體驗、提高網站性能、增加頁面瀏覽量和提高轉化率具有重要意義。開發者應該重視頁面加載優化,不斷探索和實踐各種優化方法,以提升用戶體驗,實現商業目標。通過文章介紹的幾種優化方法,開發者可以改善頁面加載速度,提升用戶體驗,增加頁面瀏覽量,提高應用的活躍度和用戶粘性。只有不斷優化頁面加載速度,才能更好地滿足用戶需求,提升應用價值。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Web
    Web
    +關注

    關注

    2

    文章

    1262

    瀏覽量

    69441
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68521
  • 組件
    +關注

    關注

    1

    文章

    512

    瀏覽量

    17813
  • HarmonyOS
    +關注

    關注

    79

    文章

    1973

    瀏覽量

    30143

原文標題:HarmonyOS Web場景性能優化指導

文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    鴻蒙原生應用元服務開發-Web加載HTML格式的文本數據

    Web組件可以通過loadData接口實現加載HTML格式的文本數據。當開發者不需要加載整個頁面,只需要顯示一些頁面片段時,可通過此功能來快
    發表于 04-29 15:12

    鴻蒙原生應用元服務開發-Web加載HTML格式的文本數據

    Web組件可以通過loadData接口實現加載HTML格式的文本數據。當開發者不需要加載整個頁面,只需要顯示一些頁面片段時,可通過此功能來快
    發表于 04-30 16:06

    鴻蒙原生應用元服務開發-Web前端頁面調用應用側函數

    開發者使用Web組件將應用側代碼注冊到前端頁面中,注冊完成之后,前端頁面中使用注冊的對象名稱就可以調用應用側的函數,實現在前端頁面中調用應用側方法
    發表于 05-07 15:03

    鴻蒙原生應用元服務開發-Web相關說明

    Web組件用于在應用程序中顯示Web頁面內容,為開發者提供頁面加載頁面交互、
    發表于 05-10 15:03

    鴻蒙原生應用元服務開發-Web應用側調用前端頁面函數

    應用側可以通過runJavaScript()方法調用前端頁面的JavaScript相關函數。 在下面的示例中,點擊應用側的“runJavaScript”按鈕時,來觸發前端頁面的htmlTest
    發表于 05-11 15:31

    鴻蒙原生應用元服務開發WEB-使用Devtools工具調試前端頁面

    Web組件支持使用DevTools工具調試前端頁面。DevTools是一個 Web前端開發調試工具,提供了電腦上調試移動設備前端頁面的能力。開發者通過setWebDebuggingAc
    發表于 05-21 15:59

    HarmonyOS Web開發性能優化指導

    本文深入探討了Web頁面加載的原理和優化方法,為開發者提供了重要的指導和思路。在當今互聯網時代,用戶對網頁
    發表于 12-06 08:41

    HarmonyOS應用開發之頁面開發

    該文檔帶領大家手把手開發頁面,包含的知識有:1、XML編寫頁面;2、加載XML布局;3、創建Feature Ability;4、代碼編寫界面;5、實現頁面跳轉;6、跨設備啟動FA;注:
    發表于 09-10 17:44

    使用WebView組件實現應用與Web頁面間的通信

    組件為例,從WebView組件構建、Web頁面加載、應用與WebView中Web頁面間的交互三個方面出發,讓您快速了解WebView組件的基
    發表于 08-26 10:39

    web頁面與C代碼的數據交換方法是什么

    有什么情況可以保證網頁內容不被改變呢?web頁面與C代碼的數據交換方法是什么?
    發表于 02-22 08:04

    HarmonyOS—使用Web組件加載頁面

    ??loadUrl()??接口變更當前Web組件的頁面。 在下面的示例中展示加載本地頁面文件的方法: ● 將資源文件放置在應用的resour
    發表于 08-31 17:51

    HarmonyOS 應用開發 Web 組件基本屬性應用和事件

    頁面 ,并且加載完成后可通過調用??loadUrl()??接口變更當前Web組件的頁面。 在下面的示例中展示加載本地
    發表于 09-15 15:28

    HarmonyOS 管理頁面跳轉及瀏覽記錄導航

    歷史記錄導航 使用者在前端頁面點擊網頁中的鏈接時,Web組件默認會自動打開并加載目標網址。當前端頁面替換為新的加載鏈接時,會自動記錄已經訪問
    發表于 09-19 18:31

    華為開發者HarmonyOS零基礎入門:應用數據加載顯示模型

    華為開發者HarmonyOS零基礎入門:應用數據加載顯示模型,對模型進行優化與解碼進行競爭,預加載提升體驗。
    的頭像 發表于 10-23 11:05 ?1269次閱讀
    華為開發者<b class='flag-5'>HarmonyOS</b>零基礎入門:應用數據<b class='flag-5'>加載</b>顯示模型

    Web前端性能優化思路

    本文旨在整理常見Web前端性能優化的思路,可供前端開發參考。因為力求精簡,限于篇幅,所以并未詳述具體實施方案。 基于現代Web前端框架的應用,其原理是通過瀏覽器向服務器發送網絡請求,獲取必要
    的頭像 發表于 10-18 14:21 ?971次閱讀
    <b class='flag-5'>Web</b>前端性能<b class='flag-5'>優化</b>思路
    主站蜘蛛池模板: 久久国产高清视频| 国产亚洲精品福利视频| 国产成人精品永久免费视频 | 纯肉合集(高H)| 国产精品久久久久婷婷五月色 | 久草视频在线观看免费4| 恋孩癖网站大全在线观看| 欧美乱码卡一卡二卡四卡免费| 欧美午夜精品一区区电影| 涩涩视频www在线观看入口| 亚洲 欧美 综合 高清 在线| 亚洲日韩中文字幕日本有码| 最近中文字幕免费高清MV视频 | 国产成人免费高清视频| 好男人社区| 男男被强bl高h文| 甜性涩爱下载| 幼儿交1300部一区二区| mdapptv麻豆下载| 海角国精产品一区一区三区糖心| 凌馨baby| 涩涩视频在线看| 伊人网伊人网| 大岛优香久久中文字幕| 黑色丝袜在线观看| 牛牛在线国产精品| 性欧美video| 99国产精品久久人妻无码| 国产成人精品系列在线观看| 久久久久999| 色窝窝亚洲AV在线观看| 在线观看免费精品国产| 灌满内射HP1V1| 妈妈的朋友6未删减版完整在线 | 亚洲中文字幕无码一久久区 | 18video性欧美19sex高清| 攻把受做得合不拢腿play| 老司机无码精品A| 性欧美videos俄罗斯| PORN白嫩内射合集| 精品AV亚洲乱码一区二区|