HarmonyOS鸿蒙Next中Navigation中navDestination很多时的优化方案有哪些

HarmonyOS鸿蒙Next中Navigation中navDestination很多时的优化方案有哪些 详见文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-navigation-navigation-V5

其中:

  1. @Builder
  2. PageMap(name: string) {
  3. if (name === “NavDestinationTitle1”) {
  4. pageOneTmp()
  5. } else if (name === “NavDestinationTitle2”) {
  6. pageTwoTmp()
  7. } else if (name === “NavDestinationTitle3”) {
  8. pageThreeTmp()
  9. }
  10. }

当子页面有很多,怎么优化呢?


更多关于HarmonyOS鸿蒙Next中Navigation中navDestination很多时的优化方案有哪些的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

就你这个链接的最后,有个系统路由表…写在配置文件里,

更多关于HarmonyOS鸿蒙Next中Navigation中navDestination很多时的优化方案有哪些的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


【修改建议】

  1. 在工程resources/base/profile中创建创建路由表配置文件,名称可自定义,例如route_map.json。
  2. 在系统路由表配置文件中添加定义目标页面的路由信息,注意目标页面名称name与push路由栈函数的页面名称要对应,而不是目标页面的源代码文件名称对应,目标页面的源代码文件路径填写在pageSourceFile字段。
{
    "routerMap": [
        {
            "name": "XXX",
            "pageSourceFile": "src/main/ets/pages/XXX.ets",
            "buildFunction": "XXXBuilder",
            "data": {
                "description": "this is XXX"
            }
        }
    ]
}
  1. 在配置文件module.json5添加routerMap标签,关联系统路由表配置文件route_map.json。
{
    "module": {
        "routerMap": "$profile:route_map"
    }
}

鸿蒙Next中Navigation优化方案包括:使用懒加载延迟初始化未显示的navDestination;采用分页或分段加载,避免一次性加载所有目标页;通过路由表动态管理,按需加载和卸载页面实例;优化页面组件结构,减少嵌套层级;利用Navigation的栈管理机制,合理使用pop和clear操作减少内存占用。

当Navigation中NavDestination数量很多时,使用文档中的if-else链会变得难以维护。以下是几种优化方案:

  1. 使用Map或对象映射:将页面名称与对应的组件构建函数建立映射关系,通过键名直接获取,避免冗长的条件判断。
const pageMap: Record<string, () => void> = {
  "NavDestinationTitle1": pageOneTmp,
  "NavDestinationTitle2": pageTwoTmp,
  "NavDestinationTitle3": pageThreeTmp,
  // ... 其他页面
};

@Builder
PageMap(name: string) {
  const pageBuilder = pageMap[name];
  if (pageBuilder) {
    pageBuilder();
  }
}
  1. 结合动态导入(按需加载):对于复杂或非立即需要的页面,可以使用动态导入来减少初始包体积和内存占用。这需要配合页面组件的异步加载机制。

  2. 模块化与懒加载:将不同功能模块的NavDestination分组到不同的Navigation子图中,或者使用NavPathStack进行懒加载,仅在需要时创建页面实例。

  3. 统一注册机制:创建一个中心化的页面注册表,管理所有NavDestination的映射关系,便于统一维护和扩展。

这些方法能提升代码可读性、可维护性,并在性能上优化内存使用与加载速度。

回到顶部