HarmonyOS 鸿蒙Next 通过Tabs实现web组件加载

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 通过Tabs实现web组件加载

目前通过Tabs实现加载Web组件,目前页签切换,第一次加载html过慢,有什么解决方法吗

有通过Tabs实现加载Web组件的例子吗

7 回复
  1. 对于单个web的加载性能优化可以参考一楼同学的回复。

  2. tab页签切换时,第一次加载html过慢可以通过tabController的preloadItems()接口实现其他tab页的预加载,该接口控制Tabs预加载指定子节点,调用该接口后会一次性加载所有参数指定的子节点。参考以下demo:

import { BusinessError } from '@kit.BasicServicesKit'
import { webview } from '@kit.ArkWeb'

@Entry
@Component
struct TabsPreloadItems {
  @State currentIndex: number = 0
  private tabsController: TabsController = new TabsController()
  webController1: webview.WebviewController = new webview.WebviewController();
  webSrc: string[] = [
    'https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-component-overview-V5',
    'https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5',
    'https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-tabs-V5#preloaditems12',
    'https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-web-develop-optimization-V5'
  ];

  build() {
    Column() {
      Tabs({ index: this.currentIndex, controller: this.tabsController }) {
        ForEach(this.webSrc, (item: string, index) => {
          TabContent() {
            Web({ src: item, controller: this.webController1 })
              .domStorageAccess(true)
              .javaScriptAccess(true)
              .onPageBegin(() => {
                // 预加载第1、2、3个节点,提高滑动或点击切换至这些节点时的性能
                this.tabsController.preloadItems([1, 2, 3])
                  .then(() => {
                    console.info('preloadItems success.')
                  })
                  .catch((error: BusinessError) => {
                    console.error('preloadItems failed, error code: ' + error.code + ', error message: ' + error.message)
                  })
              })
          }.tabBar(`TAB${index}`)
        })
      }
      .width('100%')
      .height('100%')
      .backgroundColor('#F1F3F5')
      .onChange((index: number) => {
        this.currentIndex = index
      })
    }
  }
}

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-tabs-V5#preloaditems12

更多关于HarmonyOS 鸿蒙Next 通过Tabs实现web组件加载的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


preloadItems预加载,如何预加载0节点呢,通过你的方式我后面几个节点的都可以了,但是0节点加载的时候还是会闪一下

tab第一个页签的加载时间是不可避免的,这个就不是tab组件的预加载的问题了,可以参考一楼同学回复的单个web的加载性能优化。

希望HarmonyOS能继续推出更多实用的功能,满足用户的不同需求。

有Tab对应的demo吗

在HarmonyOS 鸿蒙Next系统中,通过Tabs实现web组件加载,可以遵循以下步骤:

  1. 配置Tabs组件:首先,在页面的布局文件中配置Tabs组件,包括TabBar和TabContent。TabBar用于展示不同的Tab项,TabContent则用于承载对应Tab的内容。

  2. 创建Web组件:为每个Tab项创建对应的Web组件。这些组件可以通过Ability来加载Web页面,确保每个Tab都能独立加载和展示不同的Web内容。

  3. 设置Tab与Web组件的关联:在Tabs组件的代码中,通过监听TabBar的选中事件,动态改变TabContent中展示的Web组件。当用户点击某个Tab项时,相应的Web组件被加载并展示。

  4. 处理Web组件的生命周期:确保Web组件在页面切换时能够正确地加载、暂停和恢复。这有助于提升用户体验,减少不必要的资源消耗。

  5. 测试与调试:在开发过程中,不断测试Tabs组件与Web组件的交互,确保切换流畅、内容加载正确。

以上步骤提供了一个基本的框架,用于在HarmonyOS 鸿蒙Next系统中通过Tabs实现web组件的加载。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部