tracedebug 默认仅在app_debug=true且html请求时注入面板;api/cli/ajax不显示但有日志,需手动加accept:text/html头或用debug门面打点分析。

为什么 think\middleware\TraceDebug 开了但看不到耗时数据
默认只在调试模式(app_debug = true)且请求是 HTML 页面时才自动注入 Trace 面板;API 接口、CLI 命令、AJAX 请求不会显示面板,但日志里仍有记录。要查接口耗时,得主动看日志或改用 debug() 手动打点。
- 检查
config/app.php中app_debug是否为true,设为false时整个 Trace 中间件不生效 - 非浏览器访问(如 Postman、curl)需手动加请求头:
Accept: text/html,否则中间件跳过渲染 - 若用 Nginx + PHP-FPM,确认没有因
fastcgi_buffering off类配置导致响应被截断,面板 JS/CSS 加载失败
如何用 think\facade\Debug 精准定位某段代码慢在哪
Debug 门面提供轻量级计时器,比全局 Trace 更适合聚焦函数级性能瓶颈,比如查数据库查询慢、循环处理卡顿、远程 HTTP 调用延迟高。
- 用
Debug::remark('start')和Debug::remark('end')包裹待测逻辑,再用Debug::time('start', 'end')取毫秒差值 - 注意:
remark名称不能含空格或特殊字符,否则time()返回false - 多次调用同一名字的
remark会覆盖前一次时间戳,调试嵌套逻辑时建议加序号,如'parse_1'、'parse_2' - 结果不自动输出,需自己
dump()或写入日志,避免上线环境误留调试代码
Debug::remark('db_query');
Db::table('user')->where('status', 1)->select();
Debug::remark('db_done');
echo Debug::time('db_query', 'db_done'); // 输出类似 127.45
开启 trace 日志后发现 SQL 耗时和实际感受不符
Trace 日志里的 SQL 耗时仅统计 PDO 执行时间,不含连接建立、DNS 解析、网络往返、结果集序列化等环节;尤其在 MySQL 连接池未启用、长连接未复用时,真实延迟远高于日志数值。
- 确认是否启用了 PDO 的持久连接:在
database.php中设置'params' => [PDO::ATTR_PERSISTENT => true] - 用
Db::getConnect()->getPDO()->getAttribute(PDO::ATTR_CONNECTION_STATUS)检查当前是否复用连接 - 单条 SQL 显示 2ms,但页面整体加载 800ms?大概率是 N+1 查询——Trace 日志里会连续出现几十条相似
SELECT * FROM user WHERE id = ?,而不是一条IN合并查询 - 注意慢日志阈值:
database.sql_explain设为true且database.sql_explain_threshold(默认 100ms)才触发 EXPLAIN 分析,低于该值不打印执行计划
自定义中间件做性能采样时,$next($request) 执行前后的时间差异常偏大
常见原因是中间件顺序错位或存在阻塞操作,比如把日志写入放到了耗时操作之后,或者在中间件里同步调用了外部 HTTP 接口。
- 确保性能中间件注册在
app/middleware.php最顶层(数组最前面),避免被前置中间件(如权限校验、Token 解析)的耗时干扰统计 - 不要在中间件里直接调用
file_put_contents()或Log::write()写磁盘,I/O 会拖慢所有请求;改用Log::channel('daily')->info()异步通道,或先存内存后统一 flush - 如果用了 Redis 缓存中间件,检查是否开启了
redis->connect_timeout过长(如 5s),超时后会降级直连 DB,造成“中间件快、后续慢”的假象 - CLI 模式下
$next($request)可能返回null,需判空再取响应体,否则microtime(true)差值计算失效
ThinkPHP 的性能追踪不是开个开关就完事的事,真正卡点往往藏在连接复用、中间件顺序、日志落盘方式这些不起眼的地方。别光盯着 Trace 面板上那串数字,多看一眼 runtime/log 里带毫秒精度的原始日志,比任何可视化都靠谱。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











