Search code examples
laravellumen

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


when i use guzzle to get data member on join to data content is so heavy, can samebody tell me how to fix it?

$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();
        }

Solution

  • I don't know exactly what is the reason for its low speed, but there are some modifications that you should apply on your code.

    1. Don't use env() in your code. Instead define a config file for example connection.php in config folder and set your configs in it, because config file will be cached in your production server by laravel. You can cache config by running php artisan config:cache
      For example config/connection.php
    <?php
    
    return [
        'test_url'=>env('TestUrl'),
        'member_url'=>env('MemberUrl'),
    ];
    
    1. It is not required to make a new object of Client class in every iteration of foreach. You put it outside of the loop.
    $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();
    }