Laravel api 响应时间很慢?

Posted

技术标签:

【中文标题】Laravel api 响应时间很慢?【英文标题】:Laravel api response time are slow? 【发布时间】:2021-06-25 07:49:03 【问题描述】:

我有一个简单的应用程序,对 mysql 进行简单的查询(从表中选择,没有任何连接)。我的数据库记录甚至没有达到 1000 条记录,但是 laravel 获得一个简单选择查询的响应所花费的时间超过 300-400 毫秒。当我在 MySQL 控制台中尝试时,它花费的时间不超过 5 毫秒。 laravel 真的那么慢吗?还是我的代码有问题?尝试使用 eloquent、查询生成器、原始查询,所有这些都花费了 300 毫秒以上。

我的控制器:

 public function search(Request $request)
     $origin = $request->get('origin');
     $destination = $request->get('destination');
     $o = explode(",",$origin);
     $d = explode(",",$destination);

    $response = DB::table('saved_routes')->where([
        'from_lat'=>$o[0],
        'from_lng'=>$o[1],
        'to_lat'=>$d[0],
        'to_lng'=>$d[1],      
    ])->get('value');
    
        if($response->isEmpty())
            return response()->json([
                ['value'=>'Data not found']
            ]);
        elseif($response[0]->value)
            return $response;
        
    

我的 js api 调用:

axios.get("/api/savedroutes/search?"+=$origin.lat,$origin.lng&destination=$destination.lat,$destination.lng`)
            .then(res => res;)

PS:我还在学习 Laravel。

谢谢!

【问题讨论】:

请将代码更新为问题,以便会员能够指出您是否做错了什么。 【参考方案1】:

在这种情况下,已经检查了MySQL没有问题,查询数据库没有问题但是需要时间来获取应用程序上已经查询到的所有数据=>应该使用分页。

【讨论】:

在我的情况下,要获取的数据只有一行,真的有必要使用分页吗? 嗨 @Primery 尝试输入以下代码来检查 $start = microtime(true); // 执行查询 $time = microtime(true) - $start; 它显示 0.032534837722778。这意味着它是30ms对吗?但是为什么当我通过 api 请求时,它可能需要超过 300 毫秒?我使用 axios 感知器来获取响应时间。 有了结果,查询获取数据没有问题。我认为根本原因不在 Laravel,可以在 js API 调用中 你能在laravel中的sql查询之前和之后放置日志吗?以及在JS中。看看你得到了什么。检查浏览器开发者控制台中的网络选项卡。将时间范围与 laravel 日志进行比较。【参考方案2】:

您可以尝试使用 return 1;爆炸后的语句,然后是查询后的语句。观察所有 3 种场景的 API 响应时间,你一定会知道什么语句需要时间。

PS:如果你想充分发挥 Laravel 的潜力,你应该使用 Eloquent

【讨论】:

以上是关于Laravel api 响应时间很慢?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 404 和 500 的 API 和网站中的不同响应(JSON 和网页)?

具有不同响应的 Laravel api 方法

用于 API 响应的 Laravel 自定义包装器

使用 Laravel 从 API 获取 JSON 响应

laravel 基于 API 响应调用的自定义认证

Laravel 尝试对 API JSON 响应进行单元测试