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

这是日志记录的执行时间

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

这是接口返回的时间

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

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

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 27

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

1年前 评论
DMMYC (楼主) 1年前
陈先生

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

1年前 评论
DMMYC (楼主) 1年前
DMMYC (楼主) 1年前

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

1年前 评论
DMMYC (楼主) 1年前

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());
    }
1年前 评论
陈先生 1年前
MArtian 1年前
DMMYC (楼主) 1年前
DMMYC (楼主) 1年前
DMMYC (楼主) 1年前
陈先生 1年前
陈先生 1年前
DMMYC (楼主) 1年前
DMMYC (楼主) 1年前

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

1年前 评论

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

1年前 评论
DMMYC (楼主) 1年前

服务器啥配置的

1年前 评论
DMMYC (楼主) 1年前
sharejia (作者) 1年前

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

file

file

1年前 评论
怎样的心 1年前
poker_face 1年前
DMMYC (楼主) 1年前

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