HarmonyOS鸿蒙Next中Web组件开发性能提升方法有哪些?

HarmonyOS鸿蒙Next中Web组件开发性能提升方法有哪些? 在HarmonyOS NEXT中进行Web组件开发时,有哪些方法可以提升性能,提高渲染效率?

3 回复

1、优化思路:

用户在使用Web组件显示网页时往往会经历四个阶段:无反馈–>白屏–>网页渲染–>完全展示,系统会在各个阶段内分别进行WebView初始化、建立网络连接、接受数据与渲染页面等操作。

要优化Web组件的首页加载性能,可以从图例标记的三个阶段来进行优化:

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

综上所述,开发者可以通过方法1和2来提升Web首页加载速度,在应用创建Ability的时候,在OnCreate阶段预先初始化内核。随后在onAppear阶段进行预解析DNS、预连接要加载的首页。

在网页跳转的场景,开发者也可以通过方法3,在onPageEnd阶段预加载下一个要访问的页面,提升Web网页间的跳转和显示速度,

2、优化方法

提前初始化内核

当应用首次打开时,默认不会初始化浏览器内核,只有当创建WebView实例的时候,才会开始初始化浏览器内核。

为了能提前初始化WebView实例,@ohos.web.webview提供了initializeWebEngine方法。该方法实现在Web组件初始化之前,通过接口加载Web引擎的动态库文件,从而提前进行Web组件动态库的加载和Web内核主进程的初始化,最终以提高启动性能,减少白屏时间。

使用方法如下:

// ../pages/InitializedPage.ets

import webview from '[@ohos](/user/ohos).web.webview';

...
  aboutToAppear() {
    // 通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。
    webview.WebviewController.initializeWebEngine();
}

3、预解析DNS、预连接

WebView在onAppear阶段进行预连接socket, 当Web内核真正发起请求的时候会直接复用预连接的socket,如果当前预解析还没完成,真正发起网络请求进行DNS解析的时候也会复用当前正在执行的DNS解析任务。同理即使预连接的socket还没有连接成功,Web内核也会复用当前正在连接中的socket,进而优化资源的加载过程。

@ohos.web.webview提供了prepareForPageLoad方法实现预连接url,在加载url之前调用此API,对url只进行DNS解析、socket建链操作,并不获取主资源子资源。

使用方法如下:

// 开启预连接需要先使用上述方法预加载WebView内核。
webview.WebviewController.initializeWebEngine();
// 启动预连接,连接地址为即将打开的网址。
webview.WebviewController.prepareForPageLoad("https://www.openharmony.cn/mainPlay", true, 2);

4、预加载下一页

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

@ohos.web.webview提供prefetchPage方法实现在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。

使用方法如下:

// ../pages/WebBrowser.ets

import webview from '[@ohos](/user/ohos).web.webview';
...

controller: webview.WebviewController = new webview.WebviewController();
...
Web({ src: 'https://www.openharmony.cn/mainPlay', controller: this.controller })
  .onPageEnd((event) => {
     ...
     // 在确定即将跳转的页面时开启预加载
     this.controller.prefetchPage('https://www.openharmony.cn/download');
  })
Button('下一页')
  .onClick(() => {
     ...
     // 跳转下一页
     this.controller.loadUrl('https://www.openharmony.cn/download');
  })

更多关于HarmonyOS鸿蒙Next中Web组件开发性能提升方法有哪些?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,提升Web组件开发性能的方法主要包括以下几点:

  1. 优化页面结构:减少DOM元素的嵌套层级,使用语义化标签,避免不必要的标签,提升渲染效率。

  2. 减少HTTP请求:合并CSS和JavaScript文件,使用CSS Sprites技术减少图片请求,使用缓存策略减少重复请求。

  3. 使用异步加载:对JavaScript和CSS文件使用异步加载(如asyncdefer属性),避免阻塞页面渲染。

  4. 代码压缩与优化:对HTML、CSS和JavaScript进行压缩和混淆,减少文件大小,提升加载速度。

  5. 使用Web Workers:将耗时的计算任务放到Web Workers中执行,避免阻塞主线程,提升页面响应速度。

  6. 懒加载:对图片、视频等资源使用懒加载技术,延迟加载非视口内的资源,减少初始加载时间。

  7. 减少重绘与回流:通过使用transformopacity等属性减少重绘与回流,优化页面渲染性能。

  8. 使用CDN加速:将静态资源部署到CDN上,利用CDN的分布式节点加速资源加载。

  9. 合理使用缓存:利用浏览器缓存机制,设置合理的缓存策略,减少重复加载资源。

  10. 性能监控与优化:使用性能监控工具(如Chrome DevTools)分析页面性能瓶颈,针对性地进行优化。

这些方法可以有效提升HarmonyOS鸿蒙Next中Web组件的开发性能。

在HarmonyOS鸿蒙Next中,提升Web组件开发性能的方法包括:

  1. 使用轻量级框架如LiteOS,减少资源占用;

  2. 优化JavaScript代码,减少不必要的DOM操作;

  3. 利用鸿蒙的分布式能力,将计算任务分散到不同设备;

  4. 使用鸿蒙的硬件加速特性,提升渲染速度;

  5. 实施懒加载和代码分割,减少初始加载时间。

这些方法能有效提升Web组件的响应速度和用户体验。

回到顶部