一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內(nèi)不再提示

HarmonyOS Web頁面加載的原理和優(yōu)化方法

HarmonyOS開發(fā)者 ? 來源:HarmonyOS開發(fā)者技術(shù) ? 作者:HarmonyOS開發(fā)者技術(shù) ? 2024-12-05 15:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

Web頁面加載性能優(yōu)化指導

Web頁面加載流程

Web頁面加載包含網(wǎng)絡連接、資源下載、DOM解析、JavaScript代碼編譯執(zhí)行和渲染等關鍵環(huán)節(jié),本文主要針對網(wǎng)絡連接、資源下載和完整頁面渲染這些關鍵節(jié)點的耗時進行優(yōu)化。

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

預解析:預解析指預先對DNS進行解析,可以節(jié)省DNS解析的時間,從而優(yōu)化Web的加載耗時。

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

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

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

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

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

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

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

資源攔截替換加速:在原本的資源攔截替換接口基礎上,資源攔截替換加速支持了ArrayBuffer格式的入?yún)ⅲ?a target="_blank">開發(fā)者無需在應用側(cè)進行ArrayBuffer到String格式的轉(zhuǎn)換,可直接使用ArrayBuffer格式的數(shù)據(jù)進行攔截替換。?


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

圖1Web頁面加載流程

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

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

預啟動Web渲染進程

?原理介紹

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

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

圖2預啟動Web渲染流程

預解析和預連接優(yōu)化

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

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

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

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

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

圖3預連接優(yōu)化原理圖

預下載優(yōu)化

原理介紹

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

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

圖4預下載優(yōu)化原理圖

預渲染優(yōu)化

原理介紹

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

創(chuàng)建自定義ArkWeb組件:開發(fā)者需要根據(jù)實際場景創(chuàng)建封裝一個自定義的ArkWeb組件,該ArkWeb組件被離線創(chuàng)建。

創(chuàng)建并綁定NodeController:實現(xiàn)NodeController接口,用于自定義節(jié)點的創(chuàng)建、顯示、更新等操作的管理。并將對應的NodeController對象放入到容器中,等待調(diào)用。

綁定NodeContainer組件:將NodeContainer與NodeController進行綁定,實現(xiàn)動態(tài)組件頁面顯示。

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

圖5預渲染優(yōu)化原理圖

預取POST請求優(yōu)化

原理介紹

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

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

原理介紹

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

開發(fā)者需要創(chuàng)建一個無需渲染的離線Web組件,用于進行預編譯,在預編譯結(jié)束后使用其他Web組件加載對應的業(yè)務網(wǎng)頁。

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

原理介紹

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

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

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

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

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

離線資源免攔截注入

原理介紹

在頁面加載前,將圖片、樣式表和腳本資源注入內(nèi)存緩存,節(jié)省首次加載的網(wǎng)絡請求時間。

說明

開發(fā)者需創(chuàng)建一個無需渲染的離線Web組件,用于將資源注入到內(nèi)存緩存中,使用其他Web組件加載對應的業(yè)務網(wǎng)頁。

僅使用HTTP或HTTPS協(xié)議請求的資源可被注入進內(nèi)存緩存。

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

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

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

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

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

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

單次調(diào)用最大支持注入30個資源,單個資源最大支持10Mb。

資源攔截替換加速

原理介紹

資源攔截替換加速在原本的資源攔截替換接口基礎上新增支持了ArrayBuffer格式的入?yún)?,開發(fā)者無需在應用側(cè)進行ArrayBuffer到String格式的轉(zhuǎn)換,可直接使用ArrayBuffer格式的數(shù)據(jù)進行攔截替換。

總結(jié)

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

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

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

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

    關注

    2

    文章

    1286

    瀏覽量

    71057
  • 代碼
    +關注

    關注

    30

    文章

    4893

    瀏覽量

    70441
  • 組件
    +關注

    關注

    1

    文章

    531

    瀏覽量

    18361
  • HarmonyOS
    +關注

    關注

    80

    文章

    2146

    瀏覽量

    32508

原文標題:HarmonyOS Web場景性能優(yōu)化指導

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    鴻蒙原生應用元服務開發(fā)-Web加載HTML格式的文本數(shù)據(jù)

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

    鴻蒙原生應用元服務開發(fā)-Web加載HTML格式的文本數(shù)據(jù)

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

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

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

    鴻蒙原生應用元服務開發(fā)-Web應用側(cè)調(diào)用前端頁面函數(shù)

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

    HarmonyOS Web開發(fā)性能優(yōu)化指導

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

    「極速探索HarmonyOS NEXT 」閱讀體驗】+Web組件

    :webview.WebviewController =newwebview,WebviewController(); ) build()( Column(){ Text(\'下面是web頁面\') //在組件創(chuàng)建時,加載
    發(fā)表于 03-10 10:39

    鴻蒙5開發(fā)寶藏案例分享---Web頁面內(nèi)點擊響應時延分析

    鴻蒙Web性能優(yōu)化寶藏指南!那些官方?jīng)]明說的實戰(zhàn)技巧 各位鴻蒙開發(fā)者好!最近在排查Web頁面卡頓時,意外在HarmonyOS開發(fā)者文檔里挖到
    發(fā)表于 06-12 17:09

    鴻蒙5開發(fā)寶藏案例分享---Web加載時延優(yōu)化解析

    鴻蒙開發(fā)寶藏:Web加載完成時延優(yōu)化實戰(zhàn) 大家好呀!今天在翻鴻蒙開發(fā)者文檔時,發(fā)現(xiàn)了一個隱藏的 性能優(yōu)化寶藏區(qū) ——官方竟然悄悄提供了超多實戰(zhàn)案例!尤其是****
    發(fā)表于 06-12 17:11

    鴻蒙5開發(fā)寶藏案例分享---Web開發(fā)優(yōu)化案例分享

    ;gt;ArkWeb</span>(方舟Web)組件加載Web頁面優(yōu)化技巧,簡直是提升應用流暢度的神兵利器。官方文檔寫得比較“
    發(fā)表于 06-12 17:20

    HarmonyOS應用開發(fā)之頁面開發(fā)

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

    使用WebView組件實現(xiàn)應用與Web頁面間的通信

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

    web頁面與C代碼的數(shù)據(jù)交換方法是什么

    有什么情況可以保證網(wǎng)頁內(nèi)容不被改變呢?web頁面與C代碼的數(shù)據(jù)交換方法是什么?
    發(fā)表于 02-22 08:04

    HarmonyOS—使用Web組件加載頁面

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

    HarmonyOS 應用開發(fā) Web 組件基本屬性應用和事件

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

    HarmonyOS 管理頁面跳轉(zhuǎn)及瀏覽記錄導航

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