当前位置:首页>鸿蒙APP>【鸿蒙】ArkUI 列表性能优化:LazyForEach 与组件复用深度解析

【鸿蒙】ArkUI 列表性能优化:LazyForEach 与组件复用深度解析

  • 2026-06-23 23:38:02
【鸿蒙】ArkUI 列表性能优化:LazyForEach 与组件复用深度解析

ArkUI 列表性能优化:LazyForEach 与组件复用深度解析

封面信息图

掌握本文后,你将能诊断并修复鸿蒙应用中最常见的列表卡顿问题,让万级数据量的 List 组件在中低端机型上也能丝滑滚动。

适用版本:HarmonyOS NEXT / API 12+阅读时长:约 18 分钟


场景切入:10000 条消息列表为什么会卡?

某社交 App 在真机测试中,联系人列表滑动帧率跌至 20fps。分析 Profiler 后发现:ForEach 渲染了全部 10000 个 ListItem,内存占用高达 1.2GB,每次滑动都触发大规模 Reflow。问题根源不在业务逻辑,而在于错误选择了 ForEach 而非 LazyForEach,以及没有开启组件复用机制。


一、ForEach vs LazyForEach:根本差异

ForEach(全量渲染)
┌─────────────────────────────────────┐
│  数据源 N 条  →  一次性创建 N 个节点  │
│  内存 ∝ N(线性增长)                │
│  首帧慢、滑动慢、OOM 风险高           │
└─────────────────────────────────────┘

LazyForEach(按需渲染)
┌─────────────────────────────────────────────────────┐
│  数据源 N 条  →  仅渲染可视区 + 预加载缓冲区 K 条    │
│  滑入视口 → 创建节点                                 │
│  滑出视口 → 进入缓存池(可复用)                      │
│  内存 ∝ 可视区高度(几乎恒定)                        │
└─────────────────────────────────────────────────────┘

LazyForEach 实现的核心接口:

// foundation/arkui/ace_engine/frameworks/core/components_ng/
//   pattern/list/list_pattern.cpp  — 虚拟化逻辑入口

interface IDataSource {
  totalCount(): number;                        // 数据总量
  getData(index: number): Object;              // 按索引取数据
  registerDataChangeListener(listener: DataChangeListener): void;
  unregisterDataChangeListener(listener: DataChangeListener): void;
}

关键约束LazyForEach 只能作为 ListGridSwiperWaterFlow 的直接子组件,不能脱离这四个容器单独使用。


二、IDataSource 正确实现

2.1 基础实现(错误写法 → 正确写法)

错误写法

// ❌ 直接用数组当数据源
List() {
  ForEach(this.items, (item: MessageItem) => {
    ListItem() { MessageCard({ data: item }) }
  }, (item: MessageItem) => item.id.toString())
}

问题:万条数据全部实例化,首帧渲染超过 3 秒,低端机直接 ANR。

正确写法

// ✅ 实现 IDataSource
class MessageDataSource implements IDataSource {
private data: MessageItem[] = [];
private listeners: DataChangeListener[] = [];

constructor(data: MessageItem[]) {
this.data = data;
  }

  totalCount(): number {
returnthis.data.length;
  }

  getData(index: number): MessageItem {
returnthis.data[index];
  }

  registerDataChangeListener(listener: DataChangeListener): void {
if (!this.listeners.includes(listener)) {
this.listeners.push(listener);
    }
  }

  unregisterDataChangeListener(listener: DataChangeListener): void {
const idx = this.listeners.indexOf(listener);
if (idx >= 0) {
this.listeners.splice(idx, 1);
    }
  }

// 通知框架指定索引数据已变更(精准刷新)
  notifyDataChange(index: number): void {
this.listeners.forEach(l => l.onDataChange(index));
  }

// 尾部追加一条数据(常用于分页加载)
  pushData(item: MessageItem): void {
this.data.push(item);
this.listeners.forEach(l => l.onDataAdd(this.data.length - 1));
  }

// 删除指定索引
  deleteData(index: number): void {
this.data.splice(index, 1);
this.listeners.forEach(l => l.onDataDelete(index));
  }
}

2.2 LazyForEach 使用

@Component
struct MessageList {
private dataSource: MessageDataSource = new MessageDataSource(generateMessages(10000));

  build() {
    List({ space: 8 }) {
      LazyForEach(
this.dataSource,
(item: MessageItem) => {
          ListItem() {
            MessageCard({ data: item })
          }
        },
(item: MessageItem, index: number) =>`${item.id}_${index}`// keyGenerator
      )
    }
    .cachedCount(5)   // 可视区外预加载 5 条,减少滑动白屏
  }
}

cachedCount 的最优值:根据单个 ListItem 高度计算,通常设为「屏幕高度 / 单项高度 × 0.5」,一般取 3~8。


三、组件复用:@Reusable 机制

3.1 复用原理

不开启复用(每次滑出都销毁)
  滑入  → new MessageCard()   → mount   → 渲染
  滑出  → destroy()           → GC 压力
  再滑入 → new MessageCard()  → 重新创建

开启 @Reusable(节点进缓存池)
  滑入  → 从缓存池取节点      → aboutToReuse() → 渲染
  滑出  → aboutToRecycle()    → 节点入缓存池
  再滑入 → 从缓存池取节点      → 跳过创建,直接复用

3.2 @Reusable 组件写法

@Reusable
@Component
struct MessageCard {
@State data: MessageItem = DEFAULT_MESSAGE;

// 从缓存池被取出时调用,必须在此更新所有可变状态
  aboutToReuse(params: Record<string, ESObject>): void {
this.data = params['data'as MessageItem;
// ⚠️ 不要在这里执行耗时操作(IO、网络)
  }

// 节点即将回收进缓存池时调用,可做清理
  aboutToRecycle(): void {
// 例如取消正在加载的图片请求
this.data.imageTask?.cancel();
  }

  build() {
    Row({ space: 12 }) {
      Image(this.data.avatar)
        .width(44)
        .height(44)
        .borderRadius(22)
      Column({ space: 4 }) {
        Text(this.data.name).fontSize(16).fontWeight(FontWeight.Medium)
        Text(this.data.preview).fontSize(13).fontColor('
#999').maxLines(1)
      }
      .layoutWeight(1)
      Blank()
      Text(this.data.time).fontSize(12).fontColor('#999')
    }
    .padding(12)
    .width('100%')
  }
}

关键约束

  • @Reusable 组件只能通过 @State 或 aboutToReuse 更新内部状态,不能直接修改构造函数参数后期望自动刷新。
  • aboutToReuse 的参数是 Record,key 与父组件传入的属性名一致。

3.3 父组件中触发复用

LazyForEach(this.dataSource, (item: MessageItem) => {
  ListItem() {
    MessageCard({ data: item })   // 框架自动匹配缓存池中的 MessageCard 节点
      .reuseId('message_card')    // 显式指定复用 ID,区分不同类型的 ListItem
  }
}, (item: MessageItem) => item.id.toString())

reuseId:当列表存在多种 ListItem 样式(如普通消息 / 系统通知 / 广告横幅)时,必须通过 reuseId 区分,否则会复用错误类型的节点,产生布局错乱。


四、DataChangeListener 精准通知

滥用全量刷新是另一个常见性能杀手。

// ❌ 错误:修改一条数据却触发全量重建
this.dataSource = new MessageDataSource(newData);  // 触发 LazyForEach 全量重建

// ✅ 正确:精准通知变更类型
// 单条数据内容变化
this.dataSource.notifyDataChange(index);

// 头部插入(收到新消息)
this.dataSource.unshiftData(newMessage);
// 对应监听:listener.onDataAdd(0)

// 尾部追加(分页加载更多)
this.dataSource.pushData(newMessage);
// 对应监听:listener.onDataAdd(this.data.length - 1)

DataChangeListener 完整方法表:

方法
触发时机
onDataReloaded()
全量数据刷新(谨慎使用)
onDataAdd(index)
新增一条
onDataMove(from, to)
数据换位
onDataDelete(index)
删除一条
onDataChange(index)
单条内容变更

五、最佳实践

5.1 始终为 LazyForEach 提供稳定的 keyGenerator

做法:keyGenerator 返回与数据生命周期绑定的唯一键(如数据库主键),而非 index原因:以 index 作为 key,当列表中间插入或删除数据时,框架会误以为后续所有节点都已变更,触发不必要的全量重建。对比:使用 id 作为 key,插入一条数据只触发 onDataAdd,其余节点保持不动。

5.2 @Reusable 组件内禁止重型初始化

做法:将网络请求、数据库查询、复杂计算移至数据层(ViewModel),组件只做纯渲染。原因aboutToReuse 在主线程执行,耗时操作直接阻塞帧渲染,反而比不用复用更卡。对比:若将图片解码放在 aboutToReuse 中,每次复用都触发解码,比直接 new 新组件还慢。

5.3 合理设置 cachedCount

做法:对固定高度 ListItem 设置 cachedCount(4~6),对不定高 ListItem 设置 cachedCount(2~4)原因:cachedCount 越大预加载越多,滑动越流畅,但内存占用也越高;低端机需适当降低。对比cachedCount(0) 意味着滑出可视区立即回收,快速滑动必然出现白屏。


六、常见坑点

坑1:keyGenerator 相同导致节点不刷新

现象:调用 notifyDataChange(index) 后 UI 无变化,但 getData 返回了新数据。原因:keyGenerator 返回值与旧节点相同,框架认为节点未变化,跳过重建。复现:修改 data[index].content,但 keyGenerator 仍返回 item.id(id 未变)。解决:将版本号编入 key:${item.id}_${item.version},或配合 @State 触发组件内部刷新。

坑2:@Reusable 中闭包捕获导致状态污染

现象:滑动列表后,某些 ListItem 显示了其他行的数据(串行问题)。原因:build() 中通过闭包引用外部变量,复用后状态未正确覆盖。复现Text(this.outerData.name) — outerData 在复用时不会自动更新。解决:所有动态数据必须声明为 @State 并在 aboutToReuse 中赋值。

坑3:LazyForEach 内嵌套 ForEach 导致虚拟化失效

现象:开启了 LazyForEach 但内存没有明显降低,Profiler 显示节点数等于数据总量。原因:LazyForEach 内部包了一个 ForEach,内层对子数组全量渲染,抵消了外层虚拟化效果。复现:每行用 ForEach(item.tags, ...) 渲染多个标签。解决:标签数量可预期时用固定数量组件,或将子数组也包装成独立数据源。


总结

  1. 超过 100 条的列表,无条件用 LazyForEach 替代 ForEach
  2. @Reusable + reuseId 是减少组件创建开销的核心手段,对复杂卡片效果尤为显著。
  3. DataChangeListener 精准通知比全量 reload 性能高出数倍,优先使用 onDataAdd/Delete/Change
  4. keyGenerator 必须返回稳定唯一键,避免以 index 为键导致的全量重建。
  5. aboutToReuse 只做状态赋值,耗时逻辑必须前移至数据层。

核心结论:LazyForEach + @Reusable + 精准通知三者组合,是鸿蒙高性能列表的标准解法。


参考资料

  • 官方文档:LazyForEach:数据懒加载
  • 官方文档:组件复用 @Reusable
  • 官方文档:List 性能优化最佳实践
  • OpenHarmony 源码:foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/list/list_pattern.cpp
  • OpenHarmony 源码:foundation/arkui/ace_engine/frameworks/core/components_ng/syntax/lazy_for_each_node.cpp

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-06 06:03:13 HTTP/2.0 GET : https://c.mffb.com.cn/a/496253.html
  2. 运行时间 : 0.128349s [ 吞吐率:7.79req/s ] 内存消耗:4,377.44kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a94325a19e5e597a8994b6bca69694ea
  1. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/runtime/temp/cefbf809ba1a84190cb04b0cb7abcf79.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000327s ] mysql:host=127.0.0.1;port=3306;dbname=c_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000508s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000233s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000275s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000459s ]
  6. SELECT * FROM `set` [ RunTime:0.000193s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000514s ]
  8. SELECT * FROM `article` WHERE `id` = 496253 LIMIT 1 [ RunTime:0.003103s ]
  9. UPDATE `article` SET `lasttime` = 1783288993 WHERE `id` = 496253 [ RunTime:0.011281s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000430s ]
  11. SELECT * FROM `article` WHERE `id` < 496253 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000466s ]
  12. SELECT * FROM `article` WHERE `id` > 496253 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.008612s ]
  13. SELECT * FROM `article` WHERE `id` < 496253 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003086s ]
  14. SELECT * FROM `article` WHERE `id` < 496253 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002231s ]
  15. SELECT * FROM `article` WHERE `id` < 496253 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.027284s ]
0.130015s