如何优化H5页面在HarmonyOS鸿蒙Next上的性能?

如何优化H5页面在HarmonyOS鸿蒙Next上的性能?求高手指教

4 回复

Web组件显示网页时往往会经历四个阶段:无反馈–>白屏–>网页渲染–>完全展示,系统会在各个阶段内分别进行WebView初始化、建立网络连接、接收数据与渲染页面等操作,详细的Web组件生命周期介绍可参考官网资料:Web组件的生命周期

因此要优化页面加载,可以从以下几个方面进行:

  1. WebView初始化阶段:应用打开WebView的第一步是启动浏览器内核,而这段时间由于WebView还不存在,所有后续的步骤是完全阻塞的。因此可以考虑在应用中预先完成初始化WebView,以及在初始化的同时通过预先加载组件内核、完成网络请求等方法,使得WebView初始化不是完全的阻塞后续步骤,从而减小耗时。
  2. 在建立连接阶段:如果能提前知道要访问的网页地址,我们可以预先建立连接,进行DNS预解析。
  3. 在接收资源数据阶段:当应用预先知道下一页会点击什么页面的时候,可以合理使用缓存和预加载,将该页面的资源提前下载到缓存中。

方案一:在Web组件初始化之前,通过initializeWebEngine接口加载Web引擎的动态库文件,以提高启动性能。自动预连接历史访问过的高频网站。具体步骤如下:

在 Ability 创建阶段完成 Web 组件动态库加载:

// EntryAbility.ets
import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';
import { webview } from '@kit.ArkWeb';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    webview.WebviewController.initializeWebEngine();
  }
}

在页面中使用Web组件:

// Index.ets
import { webview } from '@kit.ArkWeb';
import { hiTraceMeter } from '@kit.PerformanceAnalysisKit';

@Entry
@Component
struct Index {
  controller: webview.WebviewController = new webview.WebviewController();

  build() {
    Column() {
      Web({ src: 'https://www.example.com/example.html', controller: this.controller })
        .fileAccess(true)
        .onPageBegin(() => {
          // 性能打点
          hiTraceMeter.startTrace('getMessageData', 0);
        })
        .onPageEnd(() => {
          // 性能打点
          hiTraceMeter.finishTrace('getMessageData', 0);
        })
    }
  }
}

方案二:在页面加载之前调用prepareForPageLoad接口对url提前进行dns解析,socket建链操作,并不获取主资源子资源,进而优化资源的加载过程。参考代码如下:

开启预连接需要先使用上述方法预加载WebView内核。

webview.WebviewController.initializeWebEngine();
// 启动预连接,连接地址为即将打开的网址。
webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2); 

方案三:通过prefetchPage方法在onPageEnd阶段进行预加载,当真正去加载下一个页面的时候,如果预加载已经成功,则相当于直接从缓存中加载页面资源,速度更快。一般来说能够准确预测到用户下一步要访问的页面的时候,可以进行预加载将要访问的页面,比如小说下一页, 浏览器在地址栏输入过程中识别到用户将要访问的页面等。

// src/main/ets/pages/WebBrowser.ets
import { webview } from '@kit.ArkWeb';

@Entry
@Component
struct Index {
  controller: webview.WebviewController = new webview.WebviewController();

  build() {
    Column({space: 10}) {
      Web({ src: 'https://www.example.com', controller: this.controller })
        .onPageEnd((event) => {
          // 在确定即将跳转的页面时开启预加载
          this.controller.prefetchPage('https://www.example.com/nextpage');
        })
        .width(300)
        .height(300)
      Button('下一页')
        .onClick(() => {
          // 跳转下一页
          this.controller.loadUrl('https://www.example.com/nextpage');
        })
        .width(300)
        .height(30)
    }
    .width('100%')
  }
}

更多关于如何优化H5页面在HarmonyOS鸿蒙Next上的性能?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


现在web性能都不差啊,为啥要优化

优化H5页面在HarmonyOS鸿蒙Next上的性能,可以从以下几个方面入手:

  1. 代码优化:精简HTML、CSS和JavaScript代码,减少不必要的标签和样式,使用高效的算法和数据结构。

  2. 资源压缩:对图片、视频等资源进行压缩,使用WebP格式图片,减少资源加载时间。

  3. 缓存策略:合理使用浏览器缓存,设置合适的缓存头,减少重复请求。

  4. 异步加载:使用异步加载技术,如asyncdefer属性,避免阻塞页面渲染。

  5. 减少DOM操作:尽量减少DOM操作,使用虚拟DOM技术,提高页面渲染效率。

  6. 使用Web Workers:将复杂的计算任务放到Web Workers中执行,避免阻塞主线程。

  7. 性能监控:使用性能监控工具,如Lighthouse、Chrome DevTools,定期检测和优化页面性能。

通过以上措施,可以有效提升H5页面在HarmonyOS鸿蒙Next上的性能,提供更流畅的用户体验。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!