Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Print czy echo -- co jest szybsze?
Forum PHP.pl > Forum > Przedszkole
dr_bonzo
HAHA -- nie, ja nie pytam -- ja udzielam odpowiedzi:

  1. <pre><?php
  2. $N = 100000;
  3. $text = "Sed adipiscing molestie nunc. Nullam sodales dictum odio. Cras tellus. In l
    acinia nibh ac risus. Nam eleifend blandit nulla. Sed lacinia. Maecenas ut augue 
    in nibh laoreet suscipit. Donec lorem. Praesent risus. Sed semper mi at eros."
    ;
  4.  
  5. function test_echo( $N, $text )
  6. {
  7. for ( $i = 0; $i < $N; $i++ )
  8. {
  9. echo $text;
  10. }
  11. }
  12.  
  13. function test_print( $N, $text )
  14. {
  15. for ( $i = 0; $i < $N; $i++ )
  16. {
  17. print($text);
  18. }
  19. }
  20.  
  21. function test_print_with_return( $N, $text )
  22. {
  23. for ( $i = 0; $i < $N; $i++ )
  24. {
  25. $x = print($text);
  26. }
  27. }
  28.  
  29.  
  30. $functions = array( 'test_echo', 'test_print', 'test_print_with_return' );
  31. $times = array();
  32. foreach ( $functions as $function )
  33. {
  34. $start = microtime( true );
  35. $function( $N, $text );
  36. $end = microtime( true );
  37.  
  38. $times[ $function ][ 'total' ] = ($end - $start );
  39. $times[ $function ][ 'single' ] = ($end - $start )/ (float) $N;
  40. printf( "* %s = %.5f<br />", $function, ( $end - $start ) );
  41. }
  42.  
  43. print( "==========================<br />" );
  44. print( "N = $N<br />" );
  45.  
  46. foreach ( $functions as $function )
  47. {
  48. printf( "[%s]<br />", $function );
  49. printf( "total time = [%.4f]<br />", $times[ $function ][ 'total' ] );
  50. printf( "single  = [%.7f]<br />", $times[ $function ][ 'single' ] );
  51. }
  52.  
  53. printf( "<br />echo jest = %f raza szybsze od print<br />", ( $times[ 'test_print' ]['total'] / $times[ 'test_echo' ]['total'] ) );
  54.  
  55. printf( "<h1>ale przy pojedynczych wywolaniach roznica jest nieistotna, bo oba czasy sa ta
    k male ze byle polaczenie z baza danych zajmie znacznie wiecej czasu</h1>"
     );
  56. ?></pre>


Tym postem zmiejszam roczna liczbe glupich pytan o 5 sztuk tongue.gif
NetJaro
Skoro już tak, to robisz podstawowy błąd optymalizacji - użycie cudzysłowiów ( " ") - o wiele szybsze są pojedyńcze ;-)

Chociaż nie sądze, żeby to zmieniło wynik (tzn. nadal echo będzie szybsze, tylko będzie "bardziej szybsze") smile.gif.

Ale ten test jest bardzo przydatny dla poczatkujących - gratki dla Ciebie smile.gif I, że Ci się chciało tongue.gif smile.gif
dtb
a tak przy okazji: moze otworzyc nowy dzial forum, gdzie kazdy zamieszcza swoje artykuly?
Sabistik
Jeśli jesteś autorem jakiegoś poważnego artykułu (:, albo chcesz napisać (dysponuje tematami) zgłoś się do mnie. Od tego mamy wortal.

Pozdrawiam.
dr_bonzo
Cytat
Skoro już tak, to robisz podstawowy błąd optymalizacji - użycie cudzysłowiów ( " ") - o wiele szybsze są pojedyńcze ;-)

Wczoraj robilem tez testy z cudzyslowiami -- opublikuje pozniej.

Tutaj akurat nie ma to znaczenia -- bo sprawdzam CO JEST SZYBSZE a nie JAK szybkie, uzycie pojedynczych bycmoze zmieniloby czasy ale stosunek predkosci zostanie zachowany.


---
edit: przeoczylem te linijke biggrin.gif
Cytat
Chociaż nie sądze, żeby to zmieniło wynik (tzn. nadal echo będzie szybsze, tylko będzie "bardziej szybsze") .


Cytat
Ale ten test jest bardzo przydatny dla poczatkujących - gratki dla Ciebie I, że Ci się chciało

15 minut roboty? w przerwie ciezkiego debuggowania? smile.gif

======================================
======================================

(Nowy post, zeby to troche oddzielic -- bylza dlugi dlatego --> phpfi; edit: hmm polaczylo posty, wredne IPB tongue.gif)

Single vs double quotes

dla dlugich stringow
http://phpfi.com/169224

dla krotkich stringow
http://phpfi.com/169225

Wyniki

dlugie stringi:
Kod
* sq_simplest = 0.07140
* dq_simplest = 0.06650
* sq_variables = 8.92004
* dq_variables = 6.32161
* sq_escaped = 0.05835
* dq_escaped = 0.04975
* sq_escaped_2 = 0.08223
* dq_escaped_2 = 0.06539
* sq_quotes = 0.04127
* dq_quotes = 0.04278


krotkie stringi
Kod
* sq_simplest = 0.09131
* dq_simplest = 0.09746
* sq_variables = 0.39057
* dq_variables = 0.47681
* sq_escaped = 0.08599
* dq_escaped = 0.08502
* sq_escaped_2 = 0.08547
* dq_escaped_2 = 0.08696
* sq_quotes = 0.07908
* dq_quotes = 0.08166


NIe porownujcie czasow miedzy dlugimi a krotkimi stringami -- wykonywane bylo z rozna iloscia iteracji ($N)

Wnioski:
pojedyncze (apostrofy) czy podwojne cudzyslowy wykonuja sie ogolnie z takim samym czasem,
OPROCZ przypadku kiedy laczymy zmienne w ciag znakow: dla malych zmiennych lepiej jest $uzyc . $kokatenacji, zas dla "$dlugich -- $czegos $takiego", ale nalezy tez uwzglednic ilosc danych na jakich bedziemy operowac i czy takie optymalizacje beda konieczne.

Na zakonczenie:
Premature optimalization is the root of all Evil

czyli

Zanim zoptymalizujesz -- zmierz.
hwao
Imho, ten test jest lepiej przeprowadzony:
http://elliottback.com/wp/archives/2006/10...nce-echo-print/

Plus print'em można policzyć ilość udanych output'ów gdyż w razie powodzenia zwraca 1.

  1. <?php
  2. $iOuts = 0;
  3. $iOuts += print 'Test1';
  4. $iOuts += print 'Test2';
  5. $iOuts += print 'Test3';
  6.  
  7. echo 'Danych wyslanych z powodzeniem do output'u:'.$iOuts;
  8. ?>


No i jeszcze takie małe coś smile.gif
  1. <?php
  2. ?>
dr_bonzo
I znow musze napisac to samo -- zamknalem poprzednie okno z odpowiedzia smile.gif

Cytat
Plus print'em można policzyć ilość udanych output'ów gdyż w razie powodzenia zwraca 1.
Potrzebowales kiedys tej funkcjonalnosci?

Cytat
echo print print print print 0;

Tja, php-golf biggrin.gif

Cytat
Imho, ten test jest lepiej przeprowadzony:

Zgada sie -- przeprowadzil wiecej testow, ale wniosek jest jeden: "it doesn't matter" smile.gif
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.