如何优化循环,使用 lumen 从另一个 API 获取数据

How to optimaze looping , get data from another API with lumen

当我使用 guzzle 获取连接到数据的数据成员时,数据内容太重了,同一个人可以告诉我如何解决吗?

$getNewest=$this->Get(env('TestUrl').'listcast');
 if (!empty($getNewest['DATA'])) {
            foreach ($getNewest['DATA'] as $data) 
            {
                $client = New CLient();
                $reqGet = $client->get(env('MemberUrl').'user-token-member/'.$data['member_id']);
                $resGet = json_decode($reqGet->getBody(),true);
                $array['id']=$data['id'];
                $array['title']=$data['title'];
                $array['member_name'] =$resGet['DATA']['FIRSTNAME']." ".$resGet['DATA']['LASTNAME'];
                $array['avatar'] = $resGet['DATA']['MEMBER_IMAGE'];
                $array['desc'] = $data['desc'];
                $newest[] = $array;
            }
        } else {
            $newest = array();
        }

我不知道速度慢的确切原因,但是您应该对代码进行一些修改。

  1. 不要在代码中使用 env()。而是在配置文件夹中定义一个配置文件,例如 connection.php 并在其中设置您的配置,因为配置文件将通过 laravel 缓存在您的生产服务器中。您可以通过 运行 php artisan config:cache
    缓存配置 例如config/connection.php
<?php

return [
    'test_url'=>env('TestUrl'),
    'member_url'=>env('MemberUrl'),
];
  1. 不需要在foreach的每次迭代中都创建Clientclass的新对象。你把它放在循环之外。
$getNewest=$this->Get(config('connection.test_url').'listcast');
if (!empty($getNewest['DATA'])) {
    $client = New CLient();
    foreach ($getNewest['DATA'] as $data){
        $reqGet = $client->get(config('connection.member_url').'user-token-member/'.$data['member_id']);
        $resGet = json_decode($reqGet->getBody(),true);
        $array['id']=$data['id'];
        $array['title']=$data['title'];
        $array['member_name'] =$resGet['DATA']['FIRSTNAME']." ".$resGet['DATA']['LASTNAME'];
        $array['avatar'] = $resGet['DATA']['MEMBER_IMAGE'];
        $array['desc'] = $data['desc'];
        $newest[] = $array;
    }
} else {
    $newest = array();
}