Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Powolne generowanie strony podczas przesyłania tablicy przez $_POST
artur_rut
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.03.2008

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


Witam,

Potrzebuję przesłać między stronami informację o tym, które z checkbox'ów użytkownik zaznaczył.
Ponieważ checkbox'y są generowane w pętli (docelowo ich ilość ma się zmieniać dynamicznie), wynik zapisywany jest do tabeli.
Zastosowana przeze mnie metoda działa, ale strona generuje się ponad 3 sekundy... To trochę długo jak na tak prostą operację...
Jeśli ktoś mógłby wyjaśnić mi na czym polega problem to będę wdzięczny :-)
Poniżej zamieszczam programy.

Pozdrawiam,
Artur

Plik "1.php":

CODE

<?php
echo '<div align=center>';
echo '<form action="2.php" method="post">';
echo '<input type="submit" value="OK"><br><br>';
echo '<table border="1">';

for ($i=0; $i<=100; $i++)
{
echo '<tr><td>p '.$i.'</td><td><input type="checkbox" name="zaznaczone['.$i.']"></td></tr>';
}
echo '</table>';
echo '</form></div>';
?>


Plik "2.php":
CODE

<?php
$mtime = microtime();
$mtime = explode(' ', $mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;

$zaznaczone=$_POST['zaznaczone'];

echo '<div align=center>';

for ($i=0; $i<=100; $i++)
{
if ($zaznaczone[$i] == 'on') echo '<br>zaznaczone ['.$i.'] : = on';
else echo '<br>zaznaczone ['.$i.'] : = off';
}

$mtime = microtime();
$mtime = explode(" ", $mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);

echo (' <br> Generowanie strony trwalo ' .$totaltime. ' seconds.');
echo '</div>';
?>
Go to the top of the page
+Quote Post
domis86
post
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


wolny serwer?
sprobuj wygenerwoac tyle samo wierszy, ale nie z chceckboxem tylko np z obrazkiem jakims albo jakims tekstem, i zobacz czy tyle samo zajmie czasu
Go to the top of the page
+Quote Post
artur_rut
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.03.2008

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


No sęk w tym, że nie jest to wina serwera.
Jeśli wygeneruje 100-elementową tablicę i prześlę ją przez $_SESSION to wysyłanie trwa ok. 1 ms.
Gdy tablica jest generowana w taki sposób jak podałem trwa to ok. 3 sekund...
Próbowałem przesłać dane z formularza przez $_SESSION, ale nie udało mi się tego dokonać - no i koło się zamyka...
Dość długo już nad tym siedzę i nie widzę sensownego rozwiązania...

Pozdrawiam,
Artur
Go to the top of the page
+Quote Post
domis86
post
Post #4





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


zrob zamiast checkboxow texty (type="text") i zobacz czy tez jest wolno

Ten post edytował domis86 25.03.2008, 13:24:57
Go to the top of the page
+Quote Post
artur_rut
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.03.2008

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


Po wpisaniu (type="text") strona generuje się w 0,0004 s.
Gdy zmienię na (type="checkbox") i nie zaznaczam żadnego checkbox'a - strona generuje się 0,03 s.
Wystarczy że zaznaczę jeden checkbox i czas wzrasta do ponad 3 sekund...
O co w tym chodzi questionmark.gif?
Go to the top of the page
+Quote Post
wwalc
post
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 1
Dołączył: 26.03.2008

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


Moim zdaniem problem leży w tym, że masz buga w 2.php.
Daj sobie print_r na zaznaczone. Zobaczysz, że ta tablica trzyma jedynie zaznaczone wartości.
Jeśli nic nie zaznaczysz, 2.php generuje jeden błąd E_NOTICE.
Jeśli zaznaczysz cokolwiek masz (101 - ilosć zaznaczonych) * E_NOTICE.
Jeśli błędy są logowane do error_loga a ten jest sporych rozmiarów (lub musisz konkurować o dostęp do niego z innymi równie wadliwymi skryptami ;-)), czas wykonywania skryptu może się wydłużyć.
Hint: isset(), empty().


--------------------
http://cksource.com
"Support Open Source Software"
Go to the top of the page
+Quote Post
domis86
post
Post #7





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


hmm sprobuj 2.php zamiast for zastosowac foreach
Go to the top of the page
+Quote Post
kszychu
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Jeśli robisz to pod Firefoxem, to sprawdź pod operą. Miałem formularz, który pod FF generował się 15sekund. Pod operą trwało to niecałą sekundę.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
artur_rut
post
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.03.2008

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


Cytat(wwalc @ 26.03.2008, 10:02:00 ) *
Moim zdaniem problem leży w tym, że masz buga w 2.php.
Daj sobie print_r na zaznaczone. Zobaczysz, że ta tablica trzyma jedynie zaznaczone wartości.
Jeśli nic nie zaznaczysz, 2.php generuje jeden błąd E_NOTICE.
Jeśli zaznaczysz cokolwiek masz (101 - ilosć zaznaczonych) * E_NOTICE.

Dziękuję bardzo za pomoc - miałeś rację.
Nie wiedziałem że przeszukiwanie tabeli w taki sposób jak ja to zrobiłem generuje błędy.
Po zamianie pętli for na:
CODE
for ($i=0; $i<=100; $i++)
{
if (isset($zaznaczone[$i])) echo 'zaznaczone ['.$i.'] : = on';
else echo 'zaznaczone ['.$i.'] : = off';
}

strona generuje się w 0,0003 sekundy - i o to chodziło ! :-)
Cytat
Jeśli błędy są logowane do error_loga a ten jest sporych rozmiarów (lub musisz konkurować o dostęp do niego z innymi równie wadliwymi skryptami ;-)), czas wykonywania skryptu może się wydłużyć.

Ostatnie pytanie: skąd wiedziałeś że skrypt generuje błędy ? Podczas wyświetlania strony w przeglądarce taka informacja nie jest wyświetlana, a uruchamianie tego skryptu z wiersza poleceń: 'php 2.php' nie ma sensu, bo nie będzie miał danych wejściowych - to tak na przyszłość... :-)

Jeszcze raz dziękuję wszystkim za pomoc,
Pozdrawiam,
Artur
Go to the top of the page
+Quote Post
domis86
post
Post #10





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Artur w fazie pisania aplikacji zawsze ustawiaj se:
  1. <?php
  2. error_reporting(E_ALL | E_STRICT);
  3. ?>

na poczatku i bedziesz widzial wszystkie bledy
Go to the top of the page
+Quote Post
artur_rut
post
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.03.2008

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


Cytat(domis86 @ 26.03.2008, 11:40:05 ) *
Artur w fazie pisania aplikacji zawsze ustawiaj se:
error_reporting(E_ALL | E_STRICT);


Dzięki za radę. Error_reporting miałem domyślnie włączone, ale jak się okazuje nie miałem włączonego display_errors.

Po wpisaniu
ini_set('display_errors','1');
komunikaty o błędach są wyświetlane.

Pozdrawiam,
Artur

Ten post edytował artur_rut 26.03.2008, 12:27:10
Go to the top of the page
+Quote Post
MajareQ
post
Post #12





Grupa: Zarejestrowani
Postów: 382
Pomógł: 22
Dołączył: 21.05.2007
Skąd: Elbląg

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


ini_set('display_errors','true'); ? tongue.gif
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 18:04