Gå til innhold

Treg lasting - php, eller noe annet?


Anbefalte innlegg

I det siste har startsiden på nettsida mi - www.kvernberget.net begynt å laste tregt. Jeg henter inn data fra Avinor til å vise ankomst- og avgangstider (se her), og tror det er dette som gjør at hele siden laster tregt. Det jeg lurte på var on det var mulig for meg å gjøre noe slik at ikke hele nettsiden "går i stå" i påvente av at data fra Avinor skal laste inn, eventuelt få dette til å laste raskere? :)

Lenke til kommentar
Videoannonse
Annonse

Hent dataene via async ajax ?

 

 

Hvis jeg ikke husker helt feil så henter den dataene i "bakgrunnen" mens resten av siden laster individuelt. Står mer om dette på w3schools.

 

Med mindre det er dette du allerede gjør :whistle:

Endret av laserlars
Lenke til kommentar

jQuery gjør slike ting enkelt.

 

<div id="innholdsdiv">Loading results.....</div>

<script>
$("#innholdsdiv").load("data.php");
</script>

 

Det vil hente data fra data.php på serveren i bakgrunnen, og bytte ut innholdet i div'en når det er mottatt.

 

Du kan også bruke noe a la memcached for å cache resultatene lokalt, istedet for å laste fra avinor hver gang, eller bare lagre resultatet lokalt i en fil.

 

Hvis du vil være fancy så har du en prosess i bakgrunnen som oppdaterer det regelmessig, og bare bruker cache når du genererer siden.

Lenke til kommentar

Høres lurt ut. Men... bare for å få det inn med teskje - Hvor i forhold til koden under skal div-en og scriptet plasseres?

 

 <?php 
   include 'class.avinor.php';
       $avinor     = new avinor();
       $timeNow     = time();

       if(isset($_POST) && isset($_POST['btnSearch'])){
           $airport     = $_POST['airport'];
           $timeFrom    = $_POST['timeFrom'];
           $timeTo        = $_POST['timeTo'];
           $direction    = $_POST['direction'];
       }else{

           $airport     = "KSU";
           $timeFrom    = 0;
           $timeTo        = 5;
           $direction    = "0";
       }

       $directions = array(
           '0' => 'Begge retninger',
           'A' => 'Ankomst',
           'D' => 'Avgang'
       );
   ?>
                   <?php 
       function getHoursFromDate($time){
           date_default_timezone_set('UTC');
           if($time != ""){
               $currentTime     = str_replace("T", " ", $time);
               $date             = new DateTime($currentTime);

               $timeZone        = new DateTimeZone('Europe/Oslo');
               $date->setTimezone($timeZone);

               return $date->format('H:i');
           }

           return '';
       }

       $avinor->setAirport($airport)
              ->setTimeFrom($timeFrom)
              ->setTimeTo($timeTo);

       if($direction != "0")
           $avinor->setDirection($direction);

       $result = $avinor->getResult();
   ?>
   <table class="data-table">
     <thead>
       <td><div align="center"><br />
       </div></td>
         <td><div align="center"><strong>Rutenr.<br />
           <br /></strong></div></td>
           <td><div align="center"><strong>Tid<br />
             <br /></strong></div></td>
           <td><div align="center"><strong>Destinasjon<br />
             <br /></strong></div></td>

           <td><div align="center"><strong>Status<br />
             <br /></strong></div></td>
       </thead>

       <?php $color = "";         // DENNE MÅ STÅ HER FØRST, DEN SKAL INNEHOLDE "" OM DU SKAL STARTE MED HVIT ELLER "FARGE" OM DU SKAL STARTE MED FARGE
           foreach($result as $flight):

               // Annenhver farge kode (kan kopieres) //////////////////////
               if($color == "") { $color = "even"; }
               else { $color = ""; } 
               /////////////////////////////////////////////////////////////

               // Dersom denne ruten er kansellert skal den ha rød bakgrunnsfarge ///
               if($flight['status']['code']['code'] == "C") $color = "cancelled";
               //////////////////////////////////////////////////////////////////////



               $avg     = getHoursFromDate($flight['scheduleTime']);
               $status    = $flight['status']['code']['no'] . ' ' . getHoursFromDate($flight['status']['time']);

               if($flight['airport']['code'] == $avinor->getAirport() && $flight['direction'] != "A"){
                   $airport = $flight['viaAirport'][0]['name'];
               }else $airport = $flight['airport']['name'];

               if($flight['direction'] == "A"){
                   $fligtIcon = array(
                       'src' => 'iconArrowDown.png',
                       'text'=> 'Ankomster'
                   );
               }else{
                   $fligtIcon = array(
                       'src' => 'iconArrowUp.png',
                       'text'=> 'Avganger'
                   );
               }

               $viaAirport = '';
               if(is_array($flight['viaAirport']) && count($flight['viaAirport']) > 0){
                   foreach ($flight['viaAirport'] as $ap){
                       /**
                        * CODE: $ap['code']
                        * NAME: $ap['name']
                        */

                       $viaAirport .= utf8_decode($ap['name']);
                   }
               }


?>        
       <tr class="<?php echo $color; ?>"> <!-- ////////////////// DENNE MÅ KOPIERES -->
       <td><img src="gfx/<?php echo $fligtIcon['src']; ?>" alt="<?php echo $fligtIcon['text']; ?>" /></td>
           <?php
           $filename     = "scheduleinfo/scheduleinfo_" . $flight['flightId'] . ".php";
               if (file_exists($filename)) {
                   echo "<td><a href=\"rutedata.php?r=" . $flight['flightId'] . "\">" . $flight['flightId'] . "</a></td>";
               }else{
                   echo "<td>" . $flight['flightId'] . "</td>";
               }
           ?>
           <td><?php echo $avg; ?></td>
           <td><?php echo utf8_decode($airport); ?></td>
           <td><?php echo $status; ?></td>
       </tr>
       <?php endforeach; ?>
   </table>

Lenke til kommentar

Jeg ville plassert den koden der i filen kalt "data.php" i javascriptet som beskrevet.

 

Deretter bruker du

<div id="innholdsdiv">Loading results.....</div>

<script>
$("#innholdsdiv").load("data.php");
</script>

til å hente det inn på den siden du vil vise det frem.

Lenke til kommentar

Takk, det funket! :)

Men hva kan grunnen være til at dataene laster så tregt? På andre nettsider som henter data fra samme kilde (f.eks. denne) lastes dataene relativt raskt. Er det noe jeg har lagt inn feil? Det lastet raskt til meg òg tidligere, men plutselig gikk alt i stå. :hmm:

Lenke til kommentar

Vanskelig å si med så lite info du gir.

 

Noen tips for hva du bør se på videre : Hvor mye data blir hentet fra Avinor? Hvordan blir det behandlet? Hva skjer egentlig inni 'class.avinor.php'? Hvor mye cpu blir brukt på serveren? Hvor mye båndbredde er ledig?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...