请教一下如果要计算接口请求耗时起始时间应该从哪里开始算呢

michealzh

或者怎么实现比较优雅呢
fpm模式下 可以在 index.php起始位置加入开始时间,cli 模式下怎么处理呢?

1006 1 3
1个回答

2548a

中间件
// 开始计时
$start_time = microtime(true);
//获取响应
$response = $next($request);
//计算耗时
$finish_time = microtime(true);
$cost_time = ($finish_time - $start_time) * 1000;

return $response;

  • oliusha 2022-09-25

    有试过每一个中间件都记录开始时间吗?如果有,打印出来看看是不是都一样的。最后一个中间件的结束时间减去最后一个中间件记录的开始时间,是准确的程序运行耗时吗?

  • nitron 2022-09-25

    第一个中间件记录开始时间, 响应客户端前记录结束时间, 相减就是执行时间

  • oliusha 2022-09-25

    插件的中间件也有可能是全局中间件,插件中间件的顺序是怎么定的呢?所以怎么定位第一个中间件呢?

  • oliusha 2022-09-25

    我觉得是不是应该在判断URL是否命中路由的那个时候记录开始时间,在执行中间件后置操作的时候计算耗时比较合适呢?@walkor

  • nitron 2022-09-25

    建议了解一下什么叫中间件的洋葱模型,如果实在整不明白你干脆就关闭控制器复用,初始化控制器的时候算开始时间,响应客户端前算结束时间
    https://www.workerman.net/doc/webman/middleware.html
    至于什么时候算开始时间,根据个人需求记录,没有统一的标准,
    有人可能需要在onMessage时就算开始时间
    有人需要在第一个中间件算开始时间
    有人可能觉得过了中间件,实际进入控制器才算开始时间

  • walkor 2022-09-25

    按照 @2548a 的回答做就行了,匹配路由部分很快,约为0.0000x秒,并且框架有缓存(耗时基本为0),匹配路由部分不需要计算到耗时里。至于你要不要统计其它中间件的耗时,像 @nitron 说的,取决决于你中间件配置顺序,如果你在第一个中间件里统计耗时,那么其它中间件的耗时就包括在内,如果在最后一个中间件统计,就不包括。

  • michealzh 2022-09-25

    感谢大家的解答

年代过于久远,无法发表回答
🔝