使用Laravel做接口开发,记录程序执行的时间的LOG,显示的结果和浏览器调用接口返回的时间差距太大

这是日志记录的执行时间

使用Laravel做接口开发,记录程序执行的时间的LOG,显示的结果和浏览器调用接口返回的时间差距太大

这是接口返回的时间

使用Laravel做接口开发,记录程序执行的时间的LOG,显示的结果和浏览器调用接口返回的时间差距太大

相比的差距有些大,不知道是什么原因?
Controller 入口返回的方法不使用return,直接使用echo,反倒是快一些

Laravel 的版本为8.65,环境为ubuntu18 + php7.4

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 27

只能提个建议,可以对比项目里其他的接口在日志里显示用时多久,接口时间返回用时多久,然后再排查是这个接口的问题,或者项目的问题,还是环境有问题,如果只是这个接口有问题就查代码,如果所有接口都很慢看看是不是环境有问题了

2周前 评论
DMMYC (楼主) 2周前
陈先生

抽空读读代码,可能你就会明白 return 和 echo die 的区别了。

2周前 评论
DMMYC (楼主) 2周前
DMMYC (楼主) 2周前

所有接口都是这样那就是环境原因

2周前 评论
DMMYC (楼主) 2周前

return 比 echo die 慢是因为他返回的是一个 response 对象,通过调用 send 方法在 echo content,在返回 response 对象时候,常见的比如一些后置中间件操作会消耗响应时间,而直接 echo die 就不会经历后续逻辑。
参考代码:

 /**
     * Send the given request through the middleware / router.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    protected function sendRequestThroughRouter($request)
    {
        $this->app->instance('request', $request);

        Facade::clearResolvedInstance('request');

        $this->bootstrap();

        return (new Pipeline($this->app))
                    ->send($request)
                    ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
                    ->then($this->dispatchToRouter());
    }
2周前 评论
陈先生 2周前
MArtian 2周前
DMMYC (楼主) 2周前
DMMYC (楼主) 2周前
DMMYC (楼主) 2周前
陈先生 2周前
陈先生 2周前
DMMYC (楼主) 2周前
DMMYC (楼主) 2周前

谢谢诸位提出的答案,还是我对laravel的学习认知不够,感谢各位的解答!

2周前 评论

看下是不是开了xdebug扩展,我之前没注意开了然后也是一样的情况 :joy:

2周前 评论
DMMYC (楼主) 2周前

服务器啥配置的

2周前 评论
DMMYC (楼主) 2周前
sharejia (作者) 2周前

如果不是线上代码,可以安装 Telescope 可以追踪到在哪里花时间比较多。

file

file

2周前 评论
怎样的心 2周前
poker_face 2周前
DMMYC (楼主) 2周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!