Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] optymalizacja kodu
Forum PHP.pl > Forum > Przedszkole
lutador
Witam,


Mam w bazie w tabeli okolo 350 rekordow, wyswietlenie ich na stronie trwa okolo 1min lub dluzej. Jest to zdecydowanie za dlugo. Ponizej przestawiam swoj kod. Czy ktos moze mi powiedziec jak go zoptymalizowac zeby wyniki wyswietlaly sie szybciej

  1. <?php
  2. if($_GET['id_mag'] != '111') { // jezeli != 111 wyswietlam wszystkie lokalizacje  
  3.      $where = "WHERE u.magazyn = '$_GET[id_mag]' AND u.magazyn = l.id_mag";
  4.    }
  5.        
  6.    $query = ("SELECT u.id,
  7.        l.nazwa,
  8.        u.umowa,
  9.        u.tresc,
  10.        u.data_zaw,
  11.        u.data_zak,
  12.        u.wypow,
  13.        u.kontrahent,
  14.        u.nip,
  15.        u.stawka,
  16.        u.kaucja,
  17.        u.magazyn,
  18.        u.stan,
  19.        u.uwagi
  20.        FROM umowy u, lokalizacje l
  21.        {$where}
  22.        {$order}
  23.        ");
  24.  
  25. echo '<table class="umowy" width="1600" border="1">';
  26.    echo '<th><a href="list_umowy.php?id_mag='.$_GET['id_mag'].'&sort=l'.$sort.'">Lokalizacja</a></th>';
  27.    echo '<th><a href="list_umowy.php?id_mag='.$_GET['id_mag'].'&sort=n'.$sort.'">Nr umowy</a></th>';
  28.    echo '<th><a href="list_umowy.php?id_mag='.$_GET['id_mag'].'&sort=p'.$sort.'">Treść</a></th>';
  29.    echo '<th><a href="list_umowy.php?id_mag='.$_GET['id_mag'].'&sort=z'.$sort.'">Data zawarcia</a></th>';
  30.    echo '<th><a href="list_umowy.php?id_mag='.$_GET['id_mag'].'&sort=t'.$sort.'">Data zakończenia</a></th>';
  31.    echo '<th>Wypowiedzenie</th>';
  32.    echo '<th><a href="list_umowy.php?id_mag='.$_GET['id_mag'].'&sort=k'.$sort.'">Kontrahent</a></th>';
  33.    echo '<th><a href="list_umowy.php?id_mag='.$_GET['id_mag'].'&sort=i'.$sort.'">NIP</a></th>';
  34.    echo '<th>Stawka</th>';
  35.    echo '<th>Kaucja</th>';
  36.    echo '<th>Uwagi</th>';
  37.    echo '<th>Stan</th>';
  38.    echo '<th>Edycja/Usuń</th></tr>';
  39.    
  40.    while($wynik = mysql_fetch_array($wyswietl))    
  41.            {
  42.                    if($wynik['data_zak'] == '2132578800')
  43.                    {     $data_zak = "nieokreślony"; }
  44.                    else
  45.                    { $data_zak = @date('Y-m-d',$wynik['data_zak']);    }
  46.                    
  47.                    if($wynik['stan'] == '0')
  48.                        $wyg = ((++$parz % 2)?'1':'2') . '"\"';
  49.                    else
  50.                        $wyg = '3';            
  51.                                                          
  52.              echo '<tr class="dane'.$wyg.'"><td width="120">'. $wynik['nazwa'].'</td>';
  53.            echo '<td width="100">'. $wynik['umowa'].'</td>';
  54.            echo '<td width="250">'. $wynik['tresc'].'</td>';
  55.            echo '<td width="100">'. @date('Y-m-d',$wynik['data_zaw']).'</td>';
  56.            echo '<td width="130">'. $data_zak .'</td>';
  57.            echo '<td>'. $wynik['wypow'].' dni</td>';
  58.            echo '<td>'. $wynik['kontrahent'].'</td>';
  59.            echo '<td>'. $wynik['nip'].'</td>';
  60.            echo '<td width="200">'. $wynik['stawka'].'</td>';
  61.            echo '<td>'. $wynik['kaucja'].'</td>';
  62.            echo '<td width="150">'. $wynik['uwagi'].'</td>';
  63.            echo '<td width="40"><center><a href="list_umowy.php?act=stan&id_um=' .$wynik['id']. '&mag='.$wynik['magazyn'] .'&stan='.$wynik['stan'] .'"><img src="image/act.png" width="20" height="20" alt="Stan Umowy" /></a></center></td>';
  64.            echo '<td width="80">
  65.            <a href="list_umowy.php?act=edit&id_um=' .$wynik['id']. '&mag='.$wynik['magazyn'] .'"><img src="image/edit.png" width="16" height="16" alt="Edycja" /></a>   
  66.            <a href="list_umowy.php?act=del&id=' .$wynik['id']. '&mag='.$wynik['magazyn'].'" onClick="return confirm('Czy usunąć umowę?')"><img src="image/drop.png" width="16" height="16" alt="Usuń" /></a></td></tr>';  
  67.            }
  68. ?>
wookieb
Dodac paginacje.
piotrooo89
stronnicowanie? klik
patryczakowy
Cytat
Mam w bazie w tabeli okolo 350 rekordow,
a co to jest 350 rekordów gdybyś póścił nawet to w dwóch pętlach to moim zdaniem powinno się wykonać chwilę , ale żeby to przyśpieszyć możesz sprubować z left join są one szybsze od takich złączeń
Pilsener
1. Sprawdzić, ile czasy wykonuje się zapytanie i je zoptymalizować
2. Oduczyć się wysyłania strony do przeglądarki na raty - echo używamy RAZ
3. Zoptymalizować kod html, poczytać jakiś kurs html - ten jest z innej epoki i będzie mulić ZAWSZE
4. Porcjować wyniki z bazy (stronicowanie)
5. Dobrze jest też oddzielić kod HTML od PHP
erix
A indeksy w bazie, to masz?
isso
ja bym chyba zamiast SELECT u.id, u.cosTam, u.CostTam dał: SELECT * i tak jak wcześniej napisali - stronicowanie przez LIMIT
lutador
Indeksy mam, zapytanie z wyswietleniem 350 rekordow przez mysql trwało 0.0037 sekund wiec to raczej nie jest wina zapynia sql
zrobilem wyswietlanie w dwoch ech'ach ale dalej tak zmula :/
piotrooo89
ale w SQL odwołujesz się bezpośrednio do servera SQL, a jeśli robisz to na stronie dodatkowo zaprzęgasz do tego paser PHP. i właśnie tu pojawia się problem stronicowania.
isso
ale stronicowanie wykonuj wlasnie za pomocą zapytań SQL, bo w innym wypadku i tak będziesz wyciagal dużo danych, a później bedziesz musiał je obrabiać... SQL ma bardzo duże możliwości!
dr_bonzo
@lutador: moze strona sie RENDERUJE dlugo - a nie generuje?
Usun na razie generowanie tabelki i wypisuj tylko : ID + nazwa + <br /> i stopniowo dodawaj wiecej danych i tabelki i zobacz co wyjdzie.
I testujesz na localu czy na serwerze zewnetrznym?
lutador
probowalem juz usunac czesc pol zeby wszystkiego nie wyswietlal i bylo troche szybciej, ale sproboje tak jak mowisz i wywale calkiem tabele
Do serwera mam predkosc 100MB
Pilsener
A nie widzisz, że:
  1. <?php
  2. echo '<a href="list_umowy.php?act=edit&id_um=' .$wynik['id']. '&mag='.$wynik['magazyn'] .'">
  3. <img src="image/edit.png" width="16" height="16" alt="Edycja" /></a>';
  4. ?>
- każdy taki element to jedno zapytanie http do serwera? W dodatku ile kodu! Powinno być tak:
  1. <?php
  2. echo '<a class="edit" title="edycja" href="list_umowy.php?act=edit&id_um=' .$wynik['id']. '&mag='.$wynik['magazyn'] .'"></a>';
  3. ?>
- widzisz różnicę?
dr_bonzo
Pilsner: ale o czym ty mowisz?
Ze niby 350 edit-ow.png sie wczytuje? Akurat tylko jeden sie wczyta, przegladarka to optymalizuje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.