【发布时间】:2022-01-09 19:01:40
【问题描述】:
这是一个单一的 ajax 请求。
如你所见,我在结果中写了duration,它是所有在api后端执行的查询的持续时间。
响应长度为11 KByte,所以不是响应权重问题。
但是正如你所看到的,服务器正在服务的页面是5 seconds。
我使用的是 nginx,在这台服务器上(它是一个单项目开发 VPS),没有流量,没有并发问题。
后端是在 laravel 8 中制作的,它只做这个:
$start = microtime(true);
$data = $this->articleRepository->getProducts($request->all());
$duration = microtime(true) - $start;
return response()->json([
'status' => 'success',
'data' => $data,
'debug' => [
'duration' => $duration
]
]);
我试图用
替换 laravel 魔法 $json = json_encode([
'status' => 'success',
'data' => $data,
'debug' => [
'duration' => $duration
]
]);
return $json;
但这需要同样的时间。所以我认为这是服务器端的问题。
顺便说一句,请注意 dev VPS 是我本地网络中的 debian 11 机器。我们已经验证了上行/下行频带远远超过 350Mbits/secs,对称且稳定。
我无法诊断它,我有 VPS 的 root 访问权限,但我不知道是什么导致了这么慢
有什么想法吗?
【问题讨论】:
-
Laravel 可能会延迟加载你的
$data模型。这意味着他们可能不会请求一些数据(认为其他模型设置为关系),直到在您的 response->json 调用期间在代码中明确请求它们。查看文档中的 Eloquent Eager Loading - laravel.com/docs/master/eloquent-relationships#eager-loading -
不,我尝试回显“Hello”,但 TTFB 仍然 >4 秒
标签: laravel api performance nginx laravel-8