Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wydajność naszych skryptów PHP
ixpack
post
Post #1





Grupa: Zarejestrowani
Postów: 248
Pomógł: 55
Dołączył: 1.06.2010
Skąd: mam to wiedzieć?

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


Coś mnie tknęło, przeprowadziłem kilka testów wydajnościowych. Chodziło mi o to, czy jest różnica, gdy w moim skrypcie np. w złożonej instrukcji warunkowej "if" będę używał określonej kolejności funkcji wbudowanych php, etc.

Jest różnica - i to wielka. Znalazłem ciekawą stronę http://www.phpbench.com/, gdzie podobne testy miały miejsce.

Oto co sam zaobserwowałem:

  1. $path = __DIR__.DIRECTORY_SEPARATOR."img/";
  2.  
  3. function test($path) {
  4. $t = microtime(true);
  5. while($i < 10000) {
  6. $content = scandir($path);
  7. foreach ($content as $a) {
  8. if ($a != '.' && $a != '..' && substr($a, -5, 1) != '.' && substr($a, -4, 1) != '.' && substr($a, -3, 1) != '.' && is_dir($path.$a)) $x.= $a.'<br />';
  9. }
  10. ++$i;
  11. }
  12. return (microtime(true) - $t);
  13. }
  14.  
  15. function test2($path) {
  16. $t = microtime(true);
  17. while($i < 10000) {
  18. $content = opendir($path);
  19. while (($a = readdir($content)) !== false) {
  20. if ($a != '.' && $a != '..' && substr($a, -5, 1) != '.' && substr($a, -4, 1) != '.' && substr($a, -3, 1) != '.' && is_dir($path.$a)) $x.= $a.'<br />';
  21. }
  22. closedir($content);
  23. ++$i;
  24. }
  25. return (microtime(true) - $t);
  26. }
  27.  
  28. echo test($path).'<br />';
  29. echo test2($path).'<br />';


Proste funkcje. Gdy wstawię is_dir() na początek funkcji warunkowej, to czas przetwarzania funkcji wzrośnie "dramatycznie", gdy szybki substr() wyrzucę na rzecz kilku znaków, aby kod "ładnie wyglądał", to czas wykonania funkcji również wzrośnie. Warto moim zdaniem czasami kilka znaków dodać do naszego skryptu, aby działał jak błyskawica. Kolejność jest ważna, więc jeżeli zależy nam na szybkości skryptu - pamiętajmy o tym.

Pewnie nie jest to odkrywcze dla większości wyjadaczy, ale może się jakiemuś samoukowi przyda (IMG:style_emoticons/default/smile.gif)

Czy macie może inne "rady", które wpływają na wydajność?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(ixpack @ 12.05.2011, 18:29:16 ) *
Gdy wstawię is_dir() na początek funkcji warunkowej, to czas przetwarzania funkcji wzrośnie "dramatycznie"...

i właśnie tu piszesz głównie o instrukcji warunkowej a w zasadzie o operatorach logicznych i ich działaniu...

jeśli stosujesz operator && (AND) gdy po drodze warunek nie zostanie spełniony zostaje przerwane sprawdzanie i od razu zwrócony false - jeśli wszystko jest po myśli sprawdzone zostaną wszystkie warunki a więc też wykonane wszystkie funkcje po drodze i z PHP zostanie zwrócony TRUE - podkreślam jeszcze raz, że w PHP - gdyż np. w JavaScript jeśli wszystkie warunki po drodze zostaną spełnione zostaje zwrócona ostatnia wartość - czyli np. zmienna === 5 zostanie zwrócone 5, zmienna jest obiektem zostanie zwrócony obiekt, funkcja coś ostatnia zwraca zostanie przypisane to co zwróciła ta ostatnia funkcja...

z operatorem || (LUB) jest w drugą stronę - wszystkie warunki po drodze zostaną wykonane a więc i wszystkie funkcje jeśli wszystkie wyrażenia były fałszywe - jesli któryś był prawdziwy zostanie na tychmiast zwrócone true - przy czym w JavaScript zostanie zwrócona dana zmienna...

nieraz może to i zmniejszać czytelność ale np. w JS w jQuery można spotkać się z takim warunkowym wykonaniem funkcji:
e.stopPropagation && e.stopPropagation();
co znaczy tyle, że jeśli istnieje metoda dla zdarzenia stopPropagation zostanie ona wywołana - w JS jeśli własność obiektu nie istnieje jest zwracany undefined który == false (gdzie podkreślam == a nie ===)

akurat bardziej mi pasuje metoda zwracania w JS która jest podobna aczkolwiek użyteczna - jeśli jest wymagany operator true lub false zawsze zmienną można przekształcić przez podwójną negację: !!zmienna;
Go to the top of the page
+Quote Post

Posty w temacie


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: 2.10.2025 - 22:40