跳到内容
当前位置:首页>PPT>数字人讲 PPT 时声音卡顿、人物停画,如何系统排查与优化?

数字人讲 PPT 时声音卡顿、人物停画,如何系统排查与优化?

  • 2026-09-19 21:57:30
数字人讲 PPT 时声音卡顿、人物停画,如何系统排查与优化?

标签:数字人、WebRTC、音视频同步、TTS、H264、实时音视频、性能优化

摘要:在“PPT 备注自动转语音并驱动数字人讲解”的场景中,常见故障是播放一段时间后声音断续、人物画面停住,过一会儿又自行恢复,而 PPT 仍能正常翻页。本文从媒体链路、队列背压、音画同步和网络传输四个层面复盘排查方法,并给出一套不依赖特定项目的工程化治理方案。


一、问题现象

典型业务流程如下:

  1. 读取 PPT 当前页备注;
  2. 将备注拆分为多个文本片段;
  3. TTS 将文本生成语音;
  4. 唇形模型根据音频生成数字人口型;
  5. 音频和数字人视频通过 WebRTC 播放;
  6. PPT 页面和字幕通过控制消息切换。

运行一段时间后可能出现:

  • 声音断续或有明显卡顿;
  • 数字人停在某一帧不动;
  • 等待数秒后人物又恢复;
  • 整个过程反复发生;
  • PPT 页面仍然可以正常切换。

最后一条尤其重要:PPT 正常翻页不代表音视频链路正常。


二、先拆清楚:这是三条不同的链路

很多排查会误把“数字人、声音、PPT”当成一个整体。实际上,它们通常走三条独立通道:

PPT 备注   │   ├── TTS ── 音频 RTP ───────────────► 浏览器扬声器   │   ├── 唇形推理 ── H264 视频 RTP ─────► 数字人画面   │   └── 页面/字幕控制 ── DataChannel ──► PPT 与字幕界面

因此会出现这些组合:

表现
更可能的问题
PPT 正常,声音和人物都卡
WebRTC 链路拥塞、服务端公共线程阻塞
PPT 正常,声音继续但人物停画
H264 丢包、解码等待关键帧、视频发送拥塞
PPT 正常,人物继续但声音爆音
音频队列丢 PCM 帧、音频 RTP 丢包
三者同时停止
主事件循环、进程、GPU 或业务状态机异常

只有先区分通道,后续监控才不会跑偏。


三、完整链路中最容易出问题的四个位置

3.1 TTS 不是匀速生产,而是突发输出

PPT 备注通常是一整段长文本。即使 TTS 接口名义上支持流式返回,也可能表现为:

前一段时间没有音频        ↓短时间内返回远大于实时播放时长的音频数据

例如,几秒钟的语音可能在几百毫秒内集中进入下游。若直接写入一个很小的实时播放队列,队列会迅速溢出。

对连续 PCM 音频来说,简单丢帧会形成可听见的缺口。一次丢失可能只有十几或几十毫秒,但连续发生后就会表现为爆音、断字和卡顿。

3.2 音频背压阻塞了视频生产线程

一种常见实现是:同一个渲染线程完成视频合成、音频入队、视频入队和录制。

如果音频队列满后采用阻塞等待:

音频队列满   ↓共享渲染线程等待   ↓视频也停止生产   ↓人物画面冻结

“音频不能丢”是对的,但把背压施加在共享渲染线程上,会把局部拥塞扩大成音视频同时停顿。

3.3 生产帧率与发送帧率存在微小偏差

服务端推理可能稳定在约 25 FPS,而真实 WebRTC 发送或浏览器消费只有 24.x FPS。二者看似非常接近,但缓冲会持续累积:

每秒只多生产一点   ↓几十秒后队列逐步灌满   ↓延迟从几百毫秒增长到数秒

所以判断队列是否健康,不能只看“有没有溢出”,还要观察队列是否长期单调增长。

3.4 TURN 链路丢包导致 H264 停在上一帧

当 WebRTC 需要经 TURN 中继时,可用带宽和网络质量可能明显低于直连链路。

音频编码通常具有更强的容错能力,少量丢包时仍可能继续播放;H264 视频一旦丢失关键参考数据,浏览器则可能停在上一帧,直到收到新的可解码关键帧。

这就形成了最容易误判的现象:

声音继续,但不流畅数字人停在一帧PPT 正常翻页过一会儿数字人恢复

此时服务端可能仍在稳定推理和发送视频,问题发生在编码、传输或浏览器解码阶段。


四、不要只盯 CPU 和 GPU

CPU、GPU 和内存没有跑满,只能说明系统没有明显算力耗尽,不能证明实时媒体链路健康。

建议同时采集以下指标:

4.1 生产侧

  • TTS 首包时间;
  • 每段音频时长与生成耗时;
  • 唇形推理 FPS;
  • 音视频中间队列长度;
  • 待发送媒体时长,而不只是元素个数。

4.2 WebRTC 发送侧

  • 音频、视频实际发送包数;
  • 实际发送码率;
  • 往返时延 RTT;
  • 抖动 jitter;
  • 累计丢包和区间丢包率;
  • 浏览器请求关键帧的频率。

4.3 消费侧

  • 浏览器实际解码 FPS;
  • 丢弃帧数量;
  • jitter buffer 延迟;
  • 当前连接使用直连、STUN 还是 TURN;
  • 视频是否在等待关键帧。

排查时应建立时间线:

TTS 开始 → 首包 → 推理 → AV 入队 → RTP 发送 → 浏览器解码 → PPT 切换

只要这些日志使用同一时间基准,就能判断停顿发生在哪一段。


五、方案演进:哪些办法有效,哪些可能适得其反

5.1 仅扩大队列:只能缓解,不能根治

扩大队列可以吸收短时突发,但无法解决长期生产速率高于消费速率的问题。

队列过大还会产生副作用:

  • 端到端延迟持续增加;
  • PPT 和字幕可能早于声音;
  • 浏览器一直在播放数秒前的旧画面;
  • 断线重连时需要清理更多历史帧。

实时讲解场景通常更适合“数百毫秒级缓冲”,而不是堆积数秒媒体数据。具体数值应通过压测确定,而不是照搬固定参数。

5.2 音频队列满时丢帧:不可取

连续音频不能使用普通消息队列的 drop_oldest 思路。删除任意 PCM 片段都会改变声音的连续性。

更合理的原则是:

  • 音频不主动丢样本;
  • 短时突发进入有界缓冲;
  • 持续拥塞向上游传播背压;
  • 必要时暂停生成下一段 TTS,而不是无限堆积。

5.3 音频和视频完全分线程:仍可能不同步

将音频发送移到独立线程,可以防止音频队列阻塞视频渲染,但如果视频继续无条件前进,就会变成:

视频继续推进音频因背压逐渐落后字幕和 PPT 已切到后面

因此,正确的解耦不是“各发各的”,而是:

推理与发送线程解耦,但音频和视频仍以同一个媒体时钟、同一组时间单元推进。

5.4 频繁生成 H264 关键帧:恢复快,但可能放大拥塞

缩短关键帧间隔能减少视频丢包后的最长恢复时间,但关键帧体积远大于普通预测帧。如果链路已经接近带宽上限,关键帧过密会制造码率尖峰,导致更多丢包。

正确做法是同时考虑:

  • 分辨率;
  • 平均码率上限;
  • 码率缓冲窗口;
  • GOP/关键帧间隔;
  • TURN 链路真实可用带宽。

关键帧并不是越多越好。


六、推荐架构:有界 AV 单元 + 音频主时钟

一个视频帧通常对应固定数量的音频小帧。例如在常见配置下,可以将约 40ms 的媒体组成一个逻辑 AV 单元:

AV 单元 N├── 音频片段 N.1├── 音频片段 N.2├── 视频帧 N└── 字幕/PPT 同步标记 N

这些数据由一个有界队列按 FIFO 顺序推进。

伪代码如下:

while session_is_active:    unit = media_queue.get()    wait_until_audio_track_has_space()    send_audio(unit.audio)    wait_until_video_track_has_space()    send_video(unit.video)    publish_sync_event(unit.presentation_marker)

这里的关键不是代码形式,而是四条约束:

  1. 推理线程不直接等待网络发送;
  2. 音频和视频不能长期独立前进;
  3. 媒体队列必须有上限;
  4. 队列满后应限制上游,而不是丢音频。

6.1 为什么以音频作为主时钟

讲解场景中,用户对声音缺字和断续非常敏感;视频偶尔保持上一帧,感知通常弱于音频缺失。因此适合以音频播放进度作为演讲时间线:

  • PPT 翻页绑定相应音频片段开始播放;
  • 字幕切换绑定音频时间戳;
  • 视频只允许在一个很小的容差范围内领先或落后;
  • 超过容差后,视频等待或跳到当前音频时刻对应的画面。

6.2 切换页面和中断时必须有“代际”概念

暂停、重新开始、切换文档或用户插话时,旧音频和旧视频可能仍散落在多个队列里。

可为每次播放分配一个递增的 generation/epoch:

if media_unit.generation != current_generation:    discard_as_stale(media_unit)

注意:这里丢弃的是已经失效的整组历史媒体,不是在正常播放中随意删除音频样本。


七、TTS 多片段应该怎么推进

PPT 备注常被拆成多个 TTS 片段。建议采用“生成可并行、播放必须有序”的策略:

文本片段 1 ─┐文本片段 2 ─┼─► 可提前生成 ─► 按序进入播放时间线文本片段 3 ─┘

具体规则:

  1. 每个片段携带页码、片段序号和 generation;
  2. TTS 可有限度预生成下一片段;
  3. 播放必须严格按页码和片段序号;
  4. 待播放时长超过阈值后,暂停继续生成;
  5. 当前页音频真正开始播放时,再发送对应 PPT/字幕事件;
  6. 中断后整组清理旧 generation 数据。

这样既能降低片段之间的首包空隙,也不会让大量 TTS 音频瞬间灌满实时队列。


八、传输层治理:不要让拥塞控制无限抬高码率

在网络质量一般或必须使用 TURN 的场景,建议采用保守配置:

  • 将视频长边控制在中等分辨率范围;
  • 根据实测链路设置视频码率硬上限;
  • 语音场景使用适合 VOIP 的较低音频码率;
  • 设置合理的关键帧间隔,避免过密 IDR;
  • 配置码率缓冲,降低关键帧瞬时峰值;
  • 在丢包持续升高时主动降级分辨率或帧率。

一个通用自适应思路是:

if packet_loss_high_for_several_windows:    lower_video_bitrate()    lower_resolution_if_needed()elif network_stable_for_a_long_window:    cautiously_raise_video_bitrate()

不要只依赖“平均 RTT 很低”。即使 RTT 只有几十到一百多毫秒,只要丢包率高,H264 依然可能频繁停画。


九、推荐的故障判定流程

步骤 1:确认业务进程是否还活着

检查进程、CPU/GPU、推理 FPS 和最近日志。如果推理 FPS 仍稳定,说明人物模型并没有停止工作。

步骤 2:观察 AV 队列趋势

  • 队列为空:上游可能产帧不足;
  • 队列持续满:下游消费不足或发送受限;
  • 音频满、视频空:音视频输出节奏失衡;
  • 两者时长差持续增大:正在发生音画漂移。

步骤 3:查看 WebRTC 发送统计

若服务端帧率正常,但累计丢包快速增加,优先处理网络、码率和关键帧,而不是继续扩大队列。

步骤 4:对照 PPT 控制通道

PPT 正常只说明控制消息仍到达,不能据此排除视频 RTP 故障。

步骤 5:分阶段压测

至少覆盖:

  • 空闲数字人连续播放;
  • 单页长备注;
  • 多页自动连续讲解;
  • TTS 多片段突发;
  • TURN 中继;
  • 人为限制带宽和注入丢包;
  • 暂停、继续、重播和断线重连。

十、验证标准

修复不能只靠“看起来不卡了”,建议设定可量化标准:

指标
目标
音频连续性
正常播放期间不主动丢 PCM 帧
AV 偏差
长时间运行不持续累积,保持在可感知阈值内
媒体积压
稳态保持在数百毫秒,而非增长到数秒
视频恢复
丢包后能在有限关键帧窗口内恢复
发送码率
不超过实测链路的安全带宽
PPT 同步
翻页和字幕跟随实际音频播放进度
长稳测试
连续运行数十分钟无周期性冻结

此外,应分别验证“服务端已发送”和“浏览器已解码”,因为这两件事并不等价。


十一、总结

数字人讲 PPT 卡顿通常不是单点故障,而是多个实时系统问题叠加:

  • TTS 突发生产;
  • 音频队列不允许丢帧;
  • 共享线程扩大背压影响;
  • 生产和消费帧率存在微小偏差;
  • TURN 链路带宽有限;
  • H264 丢包后依赖关键帧恢复;
  • PPT 控制与音视频媒体相互独立。

最终有效的方法不是简单“加大队列”,而是建立完整闭环:

有界缓冲吸收短时抖动,背压限制持续过载,音频主时钟保证同步,码率上限保护网络,关键帧负责有限时间恢复,端到端监控负责定位。

当系统具备这套机制后,即使再次出现卡顿,也能快速判断究竟是 TTS、推理、队列、编码、TURN 还是浏览器解码问题,而不再依靠反复调参碰运气。

效果展示:

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