Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] optymalizacja kodu
lutador
post
Post #1





Grupa: Zarejestrowani
Postów: 183
Pomógł: 3
Dołączył: 5.03.2007
Skąd: Opole

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Dodac paginacje.
Go to the top of the page
+Quote Post
piotrooo89
post
Post #3


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




stronnicowanie? klik
Go to the top of the page
+Quote Post
patryczakowy
post
Post #4





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


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ń
Go to the top of the page
+Quote Post
Pilsener
post
Post #5





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A indeksy w bazie, to masz?
Go to the top of the page
+Quote Post
isso
post
Post #7





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

Ostrzeżenie: (0%)
-----


ja bym chyba zamiast SELECT u.id, u.cosTam, u.CostTam dał: SELECT * i tak jak wcześniej napisali - stronicowanie przez LIMIT
Go to the top of the page
+Quote Post
lutador
post
Post #8





Grupa: Zarejestrowani
Postów: 183
Pomógł: 3
Dołączył: 5.03.2007
Skąd: Opole

Ostrzeżenie: (0%)
-----


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 :/
Go to the top of the page
+Quote Post
piotrooo89
post
Post #9


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




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.
Go to the top of the page
+Quote Post
isso
post
Post #10





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


@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?
Go to the top of the page
+Quote Post
lutador
post
Post #12





Grupa: Zarejestrowani
Postów: 183
Pomógł: 3
Dołączył: 5.03.2007
Skąd: Opole

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Pilsener
post
Post #13





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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ę?
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Pilsner: ale o czym ty mowisz?
Ze niby 350 edit-ow.png sie wczytuje? Akurat tylko jeden sie wczyta, przegladarka to optymalizuje.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 17:56