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

这是日志记录的执行时间

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

这是接口返回的时间

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

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

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 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年前