Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Singleton] Wydajność
Astarot
post
Post #1





Grupa: Zarejestrowani
Postów: 90
Pomógł: 4
Dołączył: 5.02.2006

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


Witam, postanowiłem przetestować czas wykonywania skryptu dla klasy skonstruowanej wg. wzorca Singleton, wywoływanej poprzez metode statyczną która decyduje czy należy tworzyć nowy obiekt klasy. Wywoływałem tą klasę również w tradycyjny sposób. Czas wykonywania skryptu wyglądał
następująco :

Kod
Skrypt wykonany w czasie: 1.485986 sekundy (tradycyjnie wywołany obiekt)
Skrypt wykonany w czasie: 2.203427 sekundy(wg. singleton)


Byc moze zle implementuje ten wzorzec w swojej aplikacji wiec podaje poniżej kod :

  1. <?php
  2.  
  3. class Test2
  4. {
  5. public $licznik;
  6.  
  7. private static $oInstance = false;
  8.  
  9.  
  10. public static function getinstance ( )
  11. {
  12. if ( self::$oInstance == false )
  13. {
  14. self::$oInstance = new Test2( );
  15. }
  16. return self::$oInstance;
  17. }
  18. public function mnozenie()
  19. {
  20. return $this->licznik*10;
  21. }
  22. } 
  23.  
  24. ?>


Klasę wywołuję wg singleton tym kodem:

  1. <?php
  2.  
  3. for($i=0; $i<80000; $i++)
  4. {
  5. $test =& Test2::getinstance ( ); 
  6. $test->licznik=$test->licznik++;
  7. echo $test->mnozenie();
  8. }
  9.  
  10. ?>


A tak tworze obiekt klasy w tradycyjny sposób(wg. moich testów ten sposób jest szybszy)
  1. <?php
  2.  
  3. for($i=0; $i<80000; $i++)
  4. {
  5. $test = New Test2( ); 
  6. $test->licznik=$test->licznik++;
  7. echo $test->mnozenie();
  8. }
  9.  
  10. ?>


Czy może mi ktoś wyjaśnić dlaczego kod wg singleton jest wykonywany wolniej i kiedy warto
w swoich aplikacjach implementować ten wzorzec ?

Z góry dzieki za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mariuszn3
post
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


Hmm.. a spróbuj taką wersję (przynajmniej to co napisałeś trochę mi nie pasuje):
Singleton:
  1. <?php
  2.  
  3. class TestSingleton {
  4. private $licznik = 0;
  5. private static $oInstance = false;
  6.  
  7. public static function set_instance() {
  8. if (self::$oInstance === false) {
  9. self::$oInstance = new Test2();
  10. ++self::$oInstance->licznik;
  11. }
  12. }
  13.  
  14. public static function mnozenie() {
  15. return self::$oInstance->licznik*10;
  16. }
  17. }
  18. for($i=0; $i<80000; ++$i) {
  19. TestSingleton::set_instance();
  20. echo TestSingleton::mnozenie();
  21. }
  22.  
  23. ?>


Tradycyjny sposób:
  1. <?php
  2.  
  3. class Test {
  4. private $licznik = 0 ;
  5.  
  6. public function __construct() {
  7. ++$this->licznik;
  8. }
  9.  
  10. public function mnozenie() {
  11. return $this->licznik*10;
  12. }
  13. }
  14.  
  15. for($i=0; $i<80000; ++$i) {
  16. $test = new Test;
  17. echo $test->mnozenie();
  18. }
  19.  
  20. ?>


Nie mówię, że będzie dużo lepiej, ale kod jakby właściwszy mi się wydaje.

Ten post edytował mariuszn3 3.05.2006, 15:18:20
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: 10.10.2025 - 19:36