通过 Ajax 请求的 json:查询非常快,但响应返回非常慢

Posted

技术标签:

【中文标题】通过 Ajax 请求的 json:查询非常快,但响应返回非常慢【英文标题】:json requested via Ajax: queries are very fast but response is returned very slowly 【发布时间】: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 秒 【参考方案1】:

在这个非常具体的案例中,这是一个 DNS 问题。 “localhost”解析会导致一系列问题和延迟。我们将所有指向从 'localhost' 移动到 127.0.0.1 并且 ALL 已解决。

未来 Google 员工对于 Laragon 和/或 Xamp 开发人员的注意事项:我们意外地发现,在 laravel .env 变量中配置 redis 时,将 localhost 更改为 127.0.0.1 会在同时使用 Laragon 和 Xamp 时在 Windows 机器上修复大量问题

【讨论】:

以上是关于通过 Ajax 请求的 json:查询非常快,但响应返回非常慢的主要内容,如果未能解决你的问题,请参考以下文章

ssm项目之Ajax请求返还json解析

通过在jquery中添加函数发送ajax请求来加载数据库数据,以json的格式发送到页面

【nginx】关于nginx返回json或者文本格式的配置方法

ajax传递json,然后服务器接受json的代码编写

温故而知新 Ajax 的新坑 dataType: 'json'

ajax请求json数据返回啥类型