Slow response PHP API

3

I'm doing a project with bands profiles. I'm trying to use the last.fm API.

For test database I downloaded the PHP API: link

The classes I left in Root / src / classes.php, and I started using Artist :: search ($ artistName, $ limit);

Only I want to display only the registered bands in the bank. Script actually works, but the site response takes 7 seconds to return . I'm not an "expert", so if anyone has an idea how to optimize this script.                     

            <div class="grid-cont">
            <div class="banda_search">
                <!-- hot news -->

                <form action="#">
                        <i class="fa fa-search"></i>
                        <input type="text" placeholder="Pesquise pelo nome da banda que você procura!">

                    </form>
                        </div>

                <?php

                    $getPage = (!empty($Link->getLocal()[1]) ? $Link->getLocal()[1] : 0);
                    $Pager = new Pager(HOME . '/bandas/');
                    $Pager->ExePager($getPage, 12);

                    $readbanda = new Read;
                    $readbanda->ExeRead("ws_bands", "WHERE band_parent IS NOT NULL ORDER BY band_date DESC LIMIT :limit OFFSET :offset", "limit={$Pager->getLimit()}&offset={$Pager->getOffset()}");


                      if (!$readbanda->getResult()):
                          $Pager->ReturnPage();
                          WSErro("Desculpe, não existem bandas cadastradas no momento, favor volte mais tarde!", WS_INFOR);
                      else:

                            echo'<div class="banda_news">';
                            echo'<div class="grid-row">';
                            foreach ($readbanda->getResult() as $banda):
                            extract($banda);

                               $results = Artist::search($band_title,"1");

                                   foreach($results as $artist):



                                        echo'   <div class="grid-col grid-col-3">
                                        <a href="'.HOME.'/banda/'.$band_name.'" class="small" alt="'.$band_title.'" title="'.$band_title.'">
                                        <span class="pic" alt="'.$band_title.'" title="'.$band_title.'" style="background-image: url(' . $artist->getImage(4) . ')"></span>

                                        <h3>'.$band_title.'</h3>
                                        </a>
                                        </div>';




                                  endforeach;
                            endforeach;

                            echo '</div>
                                  </div>';
                      endif;
                    $Pager->ExePaginator("ws_bands", "ORDER BY band_date");
                    echo $Pager->getPaginator();?>


                </div>                              

If someone has a better idea of getting artists' images through the API and faster, thank you.

    
asked by anonymous 27.02.2015 / 12:33

1 answer

1

To optimize the application group all the band names in a string and use the query "IN" in the conditional WHERE of the query of your bank. This will cause you to do only 1 query in the database, avoiding a few seconds of waiting between request and response.

Construct the set values for IN ():

$bands = $readbanda->getResult();
$bands_sql = '';
for($i = 0; $i < count($bands); $i++){
    $bands_sql .= '\''.$bands[$i]['band_title'].'\'';
    if($i+1<count($bands)){
    $bands_sql.= ',';
    }
}

This piece of code should generate a string with the name of all the bands, now you should create a function to consult your bank, it should look something like this:

SELECT * FROM bands WHERE band_title IN ($bands_sql);

The return of this query should be exactly what is being done today, but with time optimizations. I hope I have helped.

    
07.03.2015 / 15:40