Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
[PHP][MySQL] Zacinająca stronka ...
#1
Question 
Witam
Jestem w trakcie updatowania pewnej strony internetowej, którą regularnie sprawdzam na domowym LAMP.

Dostrzegłem, że jedna podstrona sie przywiesza po kilku szybkich zmianach kategorii co nie dzieje sie gdy wykonuje sie to powoli.

http://boras.pl/autoan/index.php?plik=naszeprodukty&wkat=c

co można samemu sprawdzić...

Pytanie moje jest nastepujące -czy to tragicznie napisana strona (mowa o PHP<->MySQL) czy LAMP nie wyrabia bądz jest coś niewłaściwie w nim ustawione?
(w bazie łącznie jest ok 150 rekordów...)

Z góry bardzo dziękuję za pomoc!


PS
Kod inkludowanego pliku PHP odpowiadającego za wszystko poniżej żółtego auta:
Kod PHP:
<?php $wkat $_GET["wkat"];  //po nacisnieciu odpowiedniej kat w adresie przekazywana jest zmienna odpowiadająca za wybór której kategorii produkty wylistować?>
    <!--/ Wyświetlanie cennika/-->
<table border="1" cellpadding="3" cellspacing="0" width="100%">
  <tr valign="top"   bgcolor="gold">
         <td align="left" colspan="2"><a href="index.php?plik=naszeprodukty&wkat=c">
          <?php if( $wkat == 'c' || $wkat == '' ){ // na podstawie $wkat wybór ikony po lewej?>
           <img src="images/ad.gif" border="0" align="bottom">
          <?php }else{ ?>
           <img src="images/ar.gif" border="0" align="bottom">
          <?php ?>
         <big><span style="color: #111199;">&nbsp;Cennik:</span></big></a></td>
  </tr>
     <?php if( $wkat == 'c' || $wkat == '' ){ //na podstawie $wkat wylistowanie lub nie produktów w cenniku?>
  <tr valign="top"   bgcolor="#eeeeee">
         <td height="20px">
           <small><b>Nazwa towaru:</b></small>
         </td>
       <td height="20px">
           <small><b>Cena*:</b></small>
         </td>
   </tr>
          <?php
          $wynik 
mysql_query("SELECT * FROM cennik ORDER BY lp ");
          while ( 
$row mysql_fetch_array($wynik)){  //samo wylistowanie produktów z cennika w pętli wedlug ustalonej kolejnosci
          
extract($row);  ?>
   <tr valign="top"   bgcolor="#eeeeee">
            <td height="20px">
               <small><?php echo $nazwa_towaru?></small>
            </td>
          <td height="20px">
               <small><?php echo $cena?>&nbsp;PLN</small>
            </td>
   </tr>
         <?php }
         } 
//na podstawie $wkat wylistowanie lub nie produktów w cenniku ----KONIEC?>
          
</table>
  <!--/ Wyświetlanie cennika KONIEC/-->

<?php
// WYSWIETLANIE PASKÓW KATEGORII
$wynik1 mysql_query("SELECT * FROM kategorie  ORDER BY lp ");
    while ( 
$row1 mysql_fetch_array($wynik1)){
                  
extract($row1);
?>

<table border="1" cellpadding="3" cellspacing="0" width="100%">
  <tr valign="top"   bgcolor="orange">
         <!--/po nacisnieciu na pasek kategorii w URL przekazywana jest nazwa kat która ma być wylistowana/-->
         <td align="left" colspan="2"><a href="index.php?plik=naszeprodukty&wkat=<?php echo $row1[id]; ?>">

          <?php if( $wkat == $id){ // wybór ikony kategorii?>
         <img src="images/ad.gif" border="0" align="bottom">
          <?php }else{ ?>
          <img src="images/ar.gif" border="0" align="bottom">
          <?php ?>
         <big><span style="color: #111199;">&nbsp;<?php echo $tytul?></span></big></a></td>
  </tr>
</table>



<?php if( $wkat == $id){ // jeżeli aktualnie dodawany pasek kategorii ma to samo id co nacisniety pasek ->wyświetl produkty należące do tej kategorii

$wynik3 mysql_query("SELECT * FROM np WHERE kat = $wkat ORDER BY lp ");  //wylistowanie produktów które należą do powyższej kategorii w dwóch różnych układach kolorów
    
while ( $row3 mysql_fetch_array($wynik3)){
                  
extract($row3);
                  
$tytul=ucfirst($tytul);
               
                  
$p eeeeee;
                  
$n dddddd;
                  if (
strlen($foto) <= 5){ ?>

                      <br>
        <table border="0" cellpadding="10" cellspacing="0" width="100%">
          <tr valign="top"   bgcolor="#<?php echo $n?>">

             <td align="left"><img src="images/orange_dot.gif" border="0"><big><span style="color: #111199;">&nbsp;<?php echo $tytul?></span></big>
           <hr style="width: 100%;
                border-top: 1px dashed #bbbbbb;
                border-bottom:1px dashed #ffffff;
                border-left:none;
                border-right:none;" /></td>
           </tr>          <tr valign="top"   bgcolor="#<?php echo $p?>">
          
         
          
           
           <td height="130px">
                <p>
                    <?php echo $tresc?>
                </p>
             </td>
          </tr>
        </table>  

          <?php }else{ ?>
                  
        <br>
        <table border="0" cellpadding="10" cellspacing="0" width="100%">
          <tr valign="top"   bgcolor="#<?php echo $n?>">
             <td rowspan="2" width="160px">
             
           <img src="images/dynamic/<?php echo $foto?>" width="160px" border="0">
           
           </td>
             <td><img src="images/orange_dot.gif" border="0"><big><span style="color: #111199;"> &nbsp;<?php echo $tytul?></span></big>
           <hr style="width: 100%; color:#82b4cd;
                border-top: 1px dashed #bbbbbb;
                border-bottom:1px dashed #ffffff;
                border-left:none;
                border-right:none;" /></td>
           </tr>          <tr valign="top"   bgcolor="#<?php echo $p?>">
           
           <td height="130px">
           <p><?php echo $tresc?>
                </p>
             </td>
          </tr>
        </table>    
                  
          <?php }?>
                 

<?php
   
}
  }
}
?>
Odpowiedz
#2
Czym więcej otwarć i zamknięć <?php ?> tym wolniej...
Hmmm... Oddziel HTML od PHP - np. SMARTY, albo najpierw wykonaj kod PHP na górze skryptu a potem na dole go tylko wyświetl wstawiając boxy.

Następnie dodaj filtrację zmiennej przesyłanej getem - wkat ... Smile
Odpowiedz
#3
Spróbuj ograniczyć liczbę znaczników otwierających i zamykających php. Możesz np. dać :
Kod:
echo "<img src='Źródło' />";
itp. Ogólnie zastanów się nad architekturą skryptu.
Pozdrawiam.
[Obrazek: beznazwy1hf.png]
Roll or die!
Odpowiedz
#4
Witam
Bardzo dziekuję za zainteresowanie.

Jestem raczej domorosłym webmasterem i zdaję sobie sprawe że estetyka kodu tej strony w skali od 1 do 300 to 2 ale kilkanaście skryptów (czyt. stron WWW) popełniłem i w tym bardziej skomplikowane forum i sklep internetowy ale nigdy nie spotkałem sie z przypadkiem zacinania sie strony.

Co do ilości znaczników <?php ?> to zawsze mnie uczono żeby php robiło tylko to co powinno ( chodzi o wykorzystanie możliwości php ) a nie z góry na dół echo echo echo .... Szczególnie że to komplikuję sprawę z uwagi na neutralizowanie znaków specjalnych php po przez "\" co w mojej opinii czyni kod mniej czytelnym.

Reasumując widząc kod i zachowanie mojej podstrony stawiacie na znaczniki <?php ?> ?
edit: już strona zawiera zamiast 28 znaczników jaskies 6 i zero poprawy ... dziwne jest to że czasami zacina sie mając już właściwie całą stronę wyświetloną a czasem tylko nagłówek .... Sad Co to może być ?

Czy są jakieś rażące błędy w sposobie komunikacji php-mysql ?

Z góry dziękuję i pozdrawiam licząc na ciąg dalszy dyskusji Wink
Odpowiedz
#5
<?php
echo "test";
?>

jest wolniejsze niż

<?php
echo 'test';
?>

wiesz dla czego? Wink

W drugim przypadku nie stosujesz \ przed "

A jeżeli chodzi o stronę to powiem tak: zmień serwer. Tyle ode mnie. Smile Nie ważne jaki będzie gigant, jakie obciążenie strona generuje... Jeżeli hosting jest dobry, to wszystko ładnie chodzi.
Odpowiedz
#6
Przerzuciłem pliki i baze na darmowy hosting unl.pl i sytuacja sie powtarza a nawet jest gorzej .. czesto już po 2 kliknieciach stronka sie wiesza na 5-10 sec :/ to musi być sprawka kodu a nie samego serwera ......

tylko co w nim jest nie tak ? czego moge jeszcze spróbować ?
Odpowiedz
#7
Wrzuć tą stronę na serwer gdzie nie ma reklam. Smile

Jakoś w tym linku co podałeś nic mi się nie zacina i wszystko dobre działa...
Odpowiedz
#8
(04-12-2009, 05:07)rodi napisał(a): Wrzuć tą stronę na serwer gdzie nie ma reklam. Smile

Jakoś w tym linku co podałeś nic mi się nie zacina i wszystko dobre działa...

To chyba niemożliwe, że Ci sie nie zacina bo już z kilku miejsc w sieci i kilku przeglądarek sprawdzałem -wszędzie sie zacina

Jak wchodzisz na strone masz pomarańczowe belki z kategoriami ... jak poklikasz kilka razy w nie to sie wszystko powiesi na kilka ładnych sekund Sad

To funkcjonuje na moim domowym serwerku LAMP i to jest całkiem dobra maszyna , to jeszcze z miesiąc temu był mój komputer do codziennej pracy na którym dało sie nawet pograć w nowe gry ..
Odpowiedz
#9
Ale ja mówię całkiem serio... Smile Mogę Ci nagrać filmik, że mi wszystko dobrze działa. Hmmm... Te bannery reklamowe we flashu owszem mogą spowolnić i to bardzo działanie strony.

Ale jeszcze zróbmy test... Smile

Wywal wszystkie -> extract.

I używaj:

<?php echo $row['tytul']; ?>
Odpowiedz
#10
(04-12-2009, 14:38)rodi napisał(a): Ale ja mówię całkiem serio... Smile Mogę Ci nagrać filmik, że mi wszystko dobrze działa. Hmmm... Te bannery reklamowe we flashu owszem mogą spowolnić i to bardzo działanie strony.

Ale jeszcze zróbmy test... Smile

Wywal wszystkie -> extract.

I używaj:

<?php echo $row['tytul']; ?>

Teraz jak już wszystko wrzuciłem na serwer nazwa.pl działa bardzo dobrze .. jednak u mnie na serwerze i na darmowych hostingach sie tnie ...


reasumując rozumiem że
-warto wszystko zawrzeć w <?php ?>
-zczytać wszystkie potrzebne rzeczy z bazy do zmiennych na początku
-nie używać extractów
-echo używać z ' ...' zamiast " ..."

zapomniałem o czymś pomijając estetyke ?

pozdrawiam
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [JAVA SCRIPT][PHP][MYSQL] Odlicznie czasu hahahehe 4 4,102 03-09-2013, 14:21
Ostatni post: mateo
  [HTML][MySQL][PHP]PHP , MySql Tabele i rekordy, Wyciąganie danych mlodyzero 8 5,698 09-01-2013, 01:59
Ostatni post: hieroshima
  [php][mysql]Istniejąca data+ 3miesiące e-konrad 3 3,099 06-09-2012, 02:10
Ostatni post: camelrafal
  Stronka z newsami mat2224 8 5,042 21-06-2012, 21:40
Ostatni post: kornell
  przechowywanie danych w pliku, a przechowywanie w bazie mysql eremen 3 3,013 11-03-2012, 22:05
Ostatni post: Pedro84

Skocz do:


Użytkownicy przeglądający ten wątek:
Sponsorzy i przyjaciele
SeoHost.pl