Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Alternatywna konstrukcja warunkowa., Co się szybciej wykona.
starach
post
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Witam.
Spieram się z kolegą o to który zapis metody tmpl_restore() wykona się szybciej.
Co wy o tym sądzicie. Mnie się wydaje że ten mniej czytelniejszy ( nie za bardzo wiem dlaczego, ale tak mi się wydaje)
  1. <?php
  2. public function tmpl_restore($index='')
  3. {
  4. $this->tmpl = $index=='' ? $this->tmpl_backup[count($this->tmpl_backup)] : isset($this->tmpl_backup[$index]) ? $this->tmpl_backup[$index] : die('Zly parametr. Template::tmpl_restore()');
  5. }
  6. public function tmpl_restore($index='')
  7. {
  8. if($index=='')
  9. {
  10. $this->tmpl = $this->tmpl_backup[count($this->tmpl_backup)];
  11. } else {
  12. if(isset($this->tmpl_backup[$index]))
  13. {
  14. $this->tmpl = $this->tmpl_backup[$index];
  15. } else {
  16. die('Zly parametr. Template::tmpl_restore()');
  17. }
  18. }
  19. }
  20. ?>

edit>
( nie za bardzo wiem dlaczego, ale tak mi się wydaje)
Nie potrafię tego właściwie uzasadnić.

Ten post edytował orglee 23.04.2007, 18:28:20
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #2





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

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


Jak to nie potrafisz? A umieszczenie obu fragmentów kodu wewnątrz microtime() i porównanie czasów?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
starach
post
Post #3





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


A na czym ja to niby mam porównać ?
Na komputerze który podczas wykonywania mojego nieskończonego cmsa wyświetla mi raz czas wyższy a raz niższy zależnie od jego widzimisię ? tongue.gif
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





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

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


Tak. Bo nic innego ci nie pozostaje.
Zapuszczasz TE JEDNA funkcje powiedzmy 1000 razy i patrzysz na czasy smile.gif


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
starach
post
Post #5





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Paranoja już sam nie wiem co jest jak.
@dr_bonzo: Prosiłbym cię uprzejmie żebyś spróbował przetestować to u siebie. Jakby jeszcze ktoś mógł to zrobić to byłbym wdzięczny.
  1. <?php
  2. function getmicrotime()
  3. {
  4. list($usec, $sec) = explode("",microtime());
  5. return ((float)$usec + (float)$sec);
  6. }
  7. function test_a($obj)
  8. {
  9. $start = getmicrotime();
  10. for($i=0; $i<1000; $i++)
  11. {
  12. $obj->tmpl_restore_a();
  13. }
  14. $end = getmicrotime();
  15. $time = $end - $start;
  16. return $time;
  17. }
  18. function test_b($obj)
  19. {
  20. $start = getmicrotime();
  21. for($i=0; $i<1000; $i++)
  22. {
  23. $obj->tmpl_restore_b();
  24. }
  25. $end = getmicrotime();
  26. $time = $end - $start;
  27. return $time;
  28. }
  29. function srednia($arr)
  30. {
  31. return array_sum($arr)/count($arr);
  32. }
  33. class Test
  34. {
  35. public $tmpl;
  36. public $tmpl_backup = array('Wpis pierwszy');
  37. public function __construct(){}
  38. public function tmpl_restore_a($index='')
  39. {
  40. $this->tmpl = ($index=='' ? $this->tmpl_backup[count($this->tmpl_backup)-1] : (isset($this->tmpl_backup[$index]) ? $this->tmpl_backup[$index] : die('Zly parametr. Template::tmpl_restore()')));
  41. }
  42. public function tmpl_restore_b($index='')
  43. {
  44. if($index=='')
  45. {
  46. $this->tmpl = $this->tmpl_backup[count($this->tmpl_backup)-1];
  47. } else {
  48. if(isset($this->tmpl_backup[$index]))
  49. {
  50. $this->tmpl = $this->tmpl_backup[$index];
  51. } else {
  52. die('Zly parametr. Template::tmpl_restore()');
  53. }
  54. }
  55. }
  56. }
  57. $test = new Test;
  58. for($i=0; $i<50; $i++)
  59. {
  60. $array_a[] = test_a($test);
  61. $array_b[] = test_b($test);
  62. }
  63. $sr_a = srednia($array_a);
  64. $sr_b = srednia($array_b);
  65. ?>
  66. <table border="1">
  67. <tr>
  68. <td align="center"><b>A(<?php echo $sr_a; ?>)</b><br>B(<?php echo $sr_b; ?>)</td>
  69. <td align="center"><b>B(<?php echo $sr_b; ?>)</b><br>A(<?php echo $sr_a; ?>)</td>
  70. </tr>
  71. <tr>
  72. <td valign="top"><?php echo '<pre>'.print_r($array_a, true).'</pre>'; ?></td>
  73. <td valign="top"><?php echo '<pre>'.print_r($array_b, true).'</pre>'; ?></td>
  74. </tr>
  75. </table>


Ten post edytował orglee 24.04.2007, 13:09:02
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #6





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

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


A twoje wyniki?



Kod
A(0.026080746650696)
B(0.025056304931641)



(A - B ) / A =~ 4% -> B jest szybsze o 4%


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Hacker
post
Post #7





Grupa: Zarejestrowani
Postów: 225
Pomógł: 0
Dołączył: 1.11.2005

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


Czasem A jest szybsze, a czasem B. Pełna losowość....


--------------------
(\.../)This is Bunny
(O.o)Copy Bunny into your signature to help him...
(> <)...on his way to world domination
Go to the top of the page
+Quote Post
KolegS
post
Post #8





Grupa: Zarejestrowani
Postów: 64
Pomógł: 0
Dołączył: 17.04.2007
Skąd: Toruń

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


a ja mam pytanie wstawiłem ten kod aby przetestować mój serwer zainstalowałem sobie webserv i wstawiłem ten kod odpalam a tam
Warning: explode() [function.explode]: Empty delimiter. in C:\Program Files\WebServ\httpd-users\proba\index.php on line 4
takie coś a potem jest tabelka gdzie same 0 jest wpisane
Czy coś z serwerem jest nie tak??
Go to the top of the page
+Quote Post
starach
post
Post #9





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


A(0.00356226444244)
B(0.00323665142059)

A(0.0034709405899)
B(0.0031241607666)

A(0.00340549468994)
B(0.00304779052734)

Fajnie czyli coś co uznawałem za szybsze jest wolniejsze ...

Zrobiłem jeszcze testy na uproszczonych warunkach,
wyniki są podobne ...

C(0.0020939874649)
D(0.0020476102829)

C(0.00220151901245)
D(0.00203478336334)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #10





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

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


Hacker: nie tyle losowosc co obie sa porownywalnie szybkie a zaklucenia sa wprowadzane przez inne aplikacje, system itd.

KolegS:
Cytat
a ja mam pytanie wstawiłem ten kod aby przetestować mój serwer zainstalowałem sobie webserv i wstawiłem ten kod odpalam a tam
Warning: explode() [function.explode]: Empty delimiter. in C:\Program Files\WebServ\httpd-users\proba\index.php on line 4
takie coś a potem jest tabelka gdzie same 0 jest wpisane
Czy coś z serwerem jest nie tak??

Bo tam jest blad w kodzie, zamiast "" ma byc " " w explode().


orglee:
Cytat
Fajnie czyli coś co uznawałem za szybsze jest wolniejsze ...
Dlatego sie mierzy a nie zgaduje smile.gif


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Hacker
post
Post #11





Grupa: Zarejestrowani
Postów: 225
Pomógł: 0
Dołączył: 1.11.2005

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


Cytat
nie tyle losowość co obie są porównywalnie szybkie a zakłócenia są wprowadzane przez inne aplikacje, system itd.


@dr_bonzo Mówiąc o pełnej losowości o to mi chodziło... Skoro zakłócenia wprowadzane przez inne aplikacje zmieniają, a wręcz odwracają wyniki to nie ma różnicy... Chyba, że w czytelności. Pod tym względem wygrywa wariant B

Ten post edytował Hacker 24.04.2007, 20:31:44


--------------------
(\.../)This is Bunny
(O.o)Copy Bunny into your signature to help him...
(> <)...on his way to world domination
Go to the top of the page
+Quote Post
starach
post
Post #12





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Może w paranoje popadam ale przetestowałem jeszcze:
if(costam == 1) {
//akcja
}
if(costam == 1):
//akcja
endif;

Druga konstrukcja jest szybsza.
Nieznacznie co prawda ale szybsza.
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 - 10:14