Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obiekty, a wydajność
404
post
Post #1





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 22.05.2011

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


Witam!

Przerabiam właśnie sobie kod na obiektowy, no i np. taką funkcję:
  1. function loadSubforums(MySQLi $db, array &$subforums)
  2. {
  3. $stmt = $db->prepare('SELECT * FROM forum_subforums ORDER BY subforumId');
  4. if( $stmt === false )
  5. return false;
  6.  
  7. if( !$stmt->execute() )
  8. return false;
  9.  
  10. if( !$stmt->bind_result($subforumId, $subforumTitle, $subforumDescription) )
  11. return false;
  12.  
  13. while( $stmt->fetch() )
  14. $subforums[] = array($subforumId, $subforumTitle, $subforumDescription);
  15.  
  16. return $stmt->close();
  17. }

...przerobiłem na:
  1. function loadSubforums(MySQLi $db, array &$subforums)
  2. {
  3. $stmt = $db->prepare('SELECT * FROM forum_subforums ORDER BY subforumId');
  4. if( $stmt === false )
  5. return false;
  6.  
  7. if( !$stmt->execute() )
  8. return false;
  9.  
  10. if( !$stmt->bind_result($subforumId, $subforumTitle, $subforumDescription) )
  11. return false;
  12.  
  13. while( $stmt->fetch() )
  14. $subforums[] = new Subforum(NULL, $subforumId, $subforumTitle, $subforumDescription);
  15.  
  16. return $stmt->close();
  17. }

Wszystko ok, ale... dlaczego czas wykonania skryptu wzrósł o 100%? O.o Dla testów umieściłem w bazie ponad dwa tysiące rekordów. Bez obiektów strona wyświetla się w trochę ponad sekundę, a używając klas czas wzrasta do dwóch sekund. Konstruktor klasy Subforum to tylko przypisania.

Z góry dziękuję za odpowiedź.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
404
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 22.05.2011

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


Cytat
Po za tym pokaż kod obiektu, może w konstruktorze coś namieszałeś i dlatego ci aż tak spowolniło.

Jak już pisałem - w konstruktorze są same przypisania.

Co do kodu to będę musiał się bardziej postarać. Myślałem już nad czymś takim:
  1. $subforums = new SubforumsLoader;
  2. $subforums->setFields('subforumId', 'subforumTitle');
  3. $subforums->setCondition('subforumState <> 1');
  4. $subforums->load();
  5.  
  6. //...
  7.  
  8. $subforum = $subforums->get(1);
  9. echo $subforum->getTitle();


Jedno tylko mnie zastanawia. W jaki sposób poradzić sobie z nazwami kolumn? Chciałbym żeby następujący kod:
  1. $subforums->setFields('subforumId', 'subforumTitle');]

był równoważny z:
  1. $subforums->setFields('subforumTitle', 'subforumId');]

Równoważny, czyli pola klasy Subforum:
  1. class Subforum
  2. {
  3. private $id,
  4. $title;
  5. //...
  6. };

zawierały poprawne (a nie odwrotne) wartości. Mówiąc krótko - chcę aby kolejność przekazywanych nazw kolumn była zupełnie dowolna. Hm, tablice asocjacyjne?
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: 16.10.2025 - 19:09