![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 15.07.2004 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Mam nadzieję, że temat który poruszę pasuje do tego miejsca. Pierwsze opiszę dziedzinę zagadnienia: Posiadam klasę, która zajmuje się przechowywaniem dowolnych danych (jej dokładna implementacja nie jest dziedziną problemu), ma dość dużą funkcjonalność (iterowanie, zachowywanie zbieżności z danymi zapisywanymi na stałe itp.). Dla naszych rozważań będę nazywał ją test. Klasa test ma 2 interesujące nas metody: get($sName) i set($sName, $mVal) służą one oczywiście do pobierania i zapisywania umieszczonych wewnątrz danych. Szkic implementacji:
Jak wszyscy wiemy same dane to dopiero 30% sukcesu, trzeba na nich jakoś operować. Dlatego najczęściej piszemy klasę, która zawiera dane i metody operujące na nich. Szkoda jednak aby tak duża funkcjonalność klasy się zmarnowała, może ona przechowywać dla nas dowolne dane, zapisywać je w odpowiednie miejsce bez naszego kiwnięcia palcem! Daltego najlepiej byłoby w jakiś sposób rozszerzyć jej funkcjonalność. Nazwijmy nową klasę (operującą na danych z klasy test) test2:
Operowanie w taki sposób na danych w klasie jest niewygodne, dlatego kolejnym krokiem mogłoby być dziedziczenie (musimy także pamiętać aby dane miały zasięg niepubliczny dlatego w klasie test akcesor public zamieniamy na protected):
Jednak w dalszym ciągu projektowanie takiego rozwinięcia do klasy test jest utrudnione. Najlepszym efektem byłoby bezpośrednie używanie zmiennych: Kod $this->a Wydaje się teraz oczywiste użycie magicznych funkcji __get i __set:Niby wszystko działa... Jednak stała się katastrofa, metody __set i __get zawsze są publiczne. Dlatego możemy zrobić tak: Co może prowadzić do katastrofy. Problem ten teoretycznie można rozwiązań używając funkcji debug_backtrace(). Oto teoretyczne rozwiązanie: http://phpfi.com/169155 . Takie rozwiązanie ma pewne plusy: możemy ustalać zasięg zmiennych, jednak z moich pomiarów wynika, że każde takie odwołanie jest o około 0.000025 sec wolniejsze niż bez sprawdzania miejsca uruchomienia. Teraz podstawowe pytania: Czy taki czas jest dopuszczalny dla takiego ułatwienia? Może ktoś widzi inny sposób rozwiązania takiego przypadku? -------------------- notDevBlog - devblog.luinnar.com
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Wszystko zależy od ilości odwołań:
do 10 nie masz się czym przejmować, przy 1000 jeszcze znośnie, ale przy 10 tyś. to już jest sporo. Moim zdaniem jeżeli skrypt uruchamia 100 użytkowników w jednym momencie a odwołań jest powiedzmy 1000 to wtedy: x - czas generowania bez kontroli 100x - to samo tylko dla 100 userów x + 0.025 - czas gen. z kontrolą 100x + 2.5 - to samo dla 100 userów Nie zostało tu uwzględnione obciążenie serwera (uznałem to za stałą z powodu, że trochę się śpieszę). Serwer będzie miał więcej do zrobienia, ale przy takiej ilości wywołań nie powinien się buntować. Nie możemy przecież panicznie bać się każdej dodatkowej milisekundy. Optymalizacja - tak, ale w granicach rozsądku (wkład nie może być większy niż dobro które powstaje). Bardziej zagłębię się w temat jak trochę mnie zluzują... -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 04:48 |