![]() |
![]() ![]() |
![]() |
![]()
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ę:
...przerobiłem na:
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ź. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 14 Dołączył: 8.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
W php5 operator & jest przestarzały w parametrach. tablice są domyślnie przekazywane przez referencję.
Możesz włączyć APC, lub jakiś tam zend optimizer, powinno sporo pomóc, różnica powinna się zmniejszyć. PHP bez optymalizatora opcode ma wolne wywołania metod. Po za tym pokaż kod obiektu, może w konstruktorze coś namieszałeś i dlatego ci aż tak spowolniło. Kod obiektowy zawsze ma większy narzut, jednak pozwala ci zrobić w czytelny sposób optymalizacje, bo obiekty myślą same za siebie jeśli je dobrze skonstruujesz. Są odporniejsze na błędy. Jak będziesz rozwijał ten kod przez parę miesięcy to ten array($costam1, $costam2, $costam3) może cię kosztować sporo nerwów, gdy przez pare godzin będziesz szukał dlaczego coś nie działa (nie masz jak w takim arrayu zrobić walidacji wprowadzanych do niego danych). Lub nawet gdy będziesz chciał stworzyć sobie nowego takiego arraya, troche sobie poszukasz zanim znajdziesz w jakiej kolejnosci podawać do niego argumenty, i znalezienie ewentualnego błędu związanego z podaniem złych argumentów też zajmie ci troche czasu. Poza tym, w rzeczywistych sytuacjach, wykorzystując wzorce projektowe, będziesz mógł w łatwy sposób zrobić cache, czy dodatkową warstwę abstrakcji dla bazy danych z której będziesz korzystał tak jakbyś normalnie wczytywał z bazy danych, a ona będzie się "martwiła" czy scachować dany obiekt, czy odczytać go z cache, czy z bazy danych. Kod przyśpieszy, będzie miał mniejszą złożoność obliczeniową, a ty będziesz miał to niejako za darmo. A jeśli chcesz szybki kod bez narzutu, to zacznij pisać skrypty CGI w C. Tam nie będziesz sie martwił dlaczego kod obiektowy spowolnił 100% tylko będziesz miał problemy typu: dlaczego wpisanie stringa do tablicy powoduje nadpisanie kodu programu, dlaczego wskaźnik nie wskazuje na to na co powinien itp. Ten post edytował Orzeszekk 15.01.2012, 18:19:05 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat W php5 operator & jest przestarzały w parametrach. tablice są domyślnie przekazywane przez referencję. Nie wprowadzaj ludzi w błąd jak czegoś nie jesteś pewien! Tablice nie są przekazywane domyślnie przez referencję, a przez wartość. Operator & wcale nie jest przestarzały... |
|
|
![]()
Post
#4
|
|
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:
Jedno tylko mnie zastanawia. W jaki sposób poradzić sobie z nazwami kolumn? Chciałbym żeby następujący kod:
był równoważny z:
Równoważny, czyli pola klasy Subforum:
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? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 14 Dołączył: 8.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Nie wprowadzaj ludzi w błąd jak czegoś nie jesteś pewien! Tablice nie są przekazywane domyślnie przez referencję, a przez wartość. Operator & wcale nie jest przestarzały... tak , faktycznie tablice lecą przez wartość. zmyliło mnie to E_NOTIFY ktore sie czasami pojawia gdy użyje się tego operatora & "passing objects by reference is deprecated" |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 10:25 |