Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zalety autoloadera i map klas
bigZbig
post
Post #1





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Odnosnie map klas i autoloadera zastanawialem sie nad wydajnoscia ich stosowania. Co prawda mapa klas (oczywiscie zakladajac ze jest tworzona przy pomocy generatora) w polaczeniu z autoloaderem pozwala na ogromna elastycznosc w przenoszeniu plikow miedzy katalogami. Z drugiej strony majac ogromna liczbe klas - liczoną w setkach - taka mapa rozrasta nam sie do ogromnych rozmiarow. Dodawanie tablicy liczacej kilkaset pozycji, z ktorych w danym wywolaniu skorzystamy zaledwie z kilkunastu (no moze z kilkudziesieciu) jest zbednym balastem dla naszego skryptu.

Mozna oczywiscie zastosowac manewr z dzieleniem tablic na kilka mniejszych. Dla kazdego "narzedzia", "aplikacji", zestawu skryptow czy jak to nazwiemy tworzymy osobna mape klas, ale jest to jedynie rozwiazanie polowiczne. Jesli przykladowo stworzymy osobna mape dla naszego systemu szablonow, osobna dla abstrakcji dostepu do bazy danych itd. to jesli nawet wykonamy jedno najprostsze zapytanie i wyswietlimy jego wynik przy pomocy wspomnianego szablonu to i tak musimy dolaczyc zaikludowac mapy. Zapewne istnieje jakas bardziej rozsadna metoda zarzadzania mapa klas, ale w chwili obecnej nie przychodzi mi taka na mysl. Moze ktos z was taka zaproponuje.

Ja ze swej strony wole recznie dbac o dodawanie odpowiednich plikow. Jesli jakas klasa dziedziczy po innej to zwyczajnie w klasie dzidziczacej inkluduje plik z klasa rodzicielska. Jedyny problem to niekiedy niepotrzebne sprawdzanie include_once w chwili kiedy dana klasa jest juz dodana. Inna niedogodnoscia jest utrata elastycznosci ale udalo mi sie to do pewnego stopnia obejsc przy pomocy definiowania stalej oraz dirname(__FILE__).

Co sadzicie o wydajnosci stosowania automap i autoloadera oraz czy waszym zdaniem lepiej miec wieksza swobode w przemieszczaniu plikow czy bardziej zoptymalizowana aplikacje i czy ta optymalizacja jest naprawde warta zachodu jakim jest reczna dłubanina?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
halfik
post
Post #2





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

Ostrzeżenie: (10%)
X----


tablica kilkuset elemetnow to zaden tragizm.
a wszystko jak zawsze zalezy czy musisz soft optymalnie meczyc - wysiskac z niego ostatnie soki.

ja osobiscie uwazam, ze jesli nie ma wyrazneych wskazan, lepiej jest poswiecic ciut wiecej pamieci etc. w zamian za wieksza elastycznosc i wygode pozniejszej pracy.
Go to the top of the page
+Quote Post
Ociu
post
Post #3





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




To pytanie takie jak: mając dużo pieniędzy wolisz jeździć maluchem czy mercedesem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . To nic strasznego. Wiadomo, coś za coś. Czas strony troszke ucierpi nad tym, ale lepiej po mieć automatyke, niż ręczne wstawianie do tablicy. Można mieć wydogę, klime, el. szyby, poduszki etc. Ale, cierpi na tym spalanie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Tak samo jest z automatycznym tworzeniem mapy. Gdy masz jedną wielką mapę, nie tracisz zbyt wiele, a gdy masz te wszystkie bajery wzrasta Ci zużycie paliwa (Tak.. mając właczoną klimę zwiększa się spalanie.) to samo jest z autoloaderem. Gdy masz podzielenie na mapy, zwiększa się czas tworzenia ich. trzeba najpierw sprawdzić jakie to pliku, stworzyć plik, stworzyć mape i dopiero ładowac mape. a gdy masz jedną wielką klase, poprsotu pakujesz wszystkie klasy tworzysz jeden, pakujesz mape i voila.

Wszystko sprowadza się do stwierdzenia: Jak kto woli.
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%)
-----


Osatnio myslalem nad takim rozwiazaniem (tez wspomniane w http://forum.php.pl/index.php?showtopic=26107 ):
- automatycznie generujemy mape z danych katalogow
- podczas uruchomienia aplikacji zbieramy dane o zalaczanych plikach
- analizujemy czestotliwosc zalaczania kazdego z plikow i te czesto zalaczane (powiedzmy w 50%-100% wywolan aplikacji) includujemy statycznie (require_once), lub pakujemy do jednego pliku (automatycznie, skryptem) i zalaczamy.

Nie tracimy na elastycznosci, a plik ze statycznym ladowaniem "klas" mozemy generowac skryptem na podstawie danych statystycznych. Wydaje sie byc idealne (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował dr_bonzo 19.01.2006, 18:33:19
Go to the top of the page
+Quote Post
bela
post
Post #5


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


A co to jest tablica kilkaset elementowa? Kilka milionów to tak, ale nie napiszesz w php czegoś z taką ilością plików.
Ja mam 150 plików, przy zapytaniu załączam jakieś 20-25 klas, skrypt wykonuje się 0.03, a więc tyle co nic.
Nie ja testowałem, a splatch (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
splatch
post
Post #6





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Wszystko zależy od kodu:
http://blog.dywicki.pl/index.php/2005/09/22/28-optimization
Go to the top of the page
+Quote Post
bigZbig
post
Post #7





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Ok mapa fajna rzecz jak sie buduje wlasna aplikacje, ale jesli chcialbym wlaczyc moje skrypty do cudzego frameworka to albo zabieram ze soba rowniez mojego generatora map i dostosowuje wszystko do lokalnego autoloadera, albo korzystam z generatora danego frameworka .

Hej czy tak naprawde ten autoloader nie jest troszke rozwiazaniem dla leniwych? Jak czesto sie zmienia strukture plikow. W momencie - nazwijmy to - oddania aplikacji do uzytku uklad plikow powinien byc juz ustabilizowany. Osobiscie rozwazam uzywanie generatora map jedynie na etapie tworzenia, testowania skryptow, ewentualnie do wygenerowania sobie sciezek, ktore pozniej wkleje do instrukcji include_once. W moim autoloaderze zaimplementuje mechanizm raportowania kazdego uzycia, albo alert ze dana klasa zostala wlaczona przy pomocy autoloadera. W ten sposob nie zapomne o dolaczeniu zadnego pliku przed ostatecznym "oddaniem go do uzytku".

Mam tez inny pomysl aby stworzyc taki generator, ktory wygeneruje mape klas i na tej podstawie w kazdym pliku zawierajacym include_once zaktualizuje sciezke do odpowiedniej klasy. Oczywiscie skrypt ten bylby uruchamiany tylko w chwili reorganizacji struktury plikow.
Go to the top of the page
+Quote Post
NuLL
post
Post #8





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Cytat
Hej czy tak naprawde ten autoloader nie jest troszke rozwiazaniem dla leniwych?

TAK (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Autoload jest dosc wolny wbrew pozorom i ja sobie tylko autoloader pozostawiam to zabaw dev abym potem go wywalic (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
hawk
post
Post #9





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


No to pójdźmy o krok dalej. Jaki jest sens w oddanym do użytku kodzie umieszczać include_once, skoro można umieścić kod załączanego pliku? Przecież to drugie rozwiązanie będzie bardziej wydajne.

Zaleta autoloadera jest taka, że nie mamy wpisanych na sztywno ścieżek do pliku i nic nas nie zmusza do tego, aby klasa Foo była w pliku foo.php. Podobną optymalizację widziałem kiedyś w starym mojavi (w nowym nie wiem jak jest): wersja debug składała się z wielu plików, wersja produkcyjna z jednego dużego. Tylko że a) pewnie autor musiał ręcznie wywalać include_once, i (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) niektóre klasy były ładowane niepotrzebnie. A tutaj możemy policzyć/zmierzyć, jak często jaka klasa jest wywoływana, i umieścić w jednym pliku tylko te najczęściej używane.
Go to the top of the page
+Quote Post
splatch
post
Post #10





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


W Mojavi 4 mechanizm ten uległ zmianie. Teraz wszystkim zarządza PackageLoader: http://trac.mojavi.org/browser/branches/4..../package/loader
Tworzy on mapy w katalogach, tak jak mówił BigZip. Użycie: http://trac.mojavi.org/browser/branches/4....ent-profile.php
Go to the top of the page
+Quote Post
.dragonfly
post
Post #11





Grupa: Zarejestrowani
Postów: 217
Pomógł: 0
Dołączył: 5.10.2003
Skąd: Londyn / UK

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


Cytat(NuLL @ 2006-01-20 12:48:29)
Autoload jest dosc wolny wbrew pozorom i ja sobie tylko autoloader pozostawiam to zabaw dev abym potem go wywalic (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Na jakiej podstawie tak piszesz? Gdy wygenerwoana mape przez autoloader dodasz do Cache i z niej pozniej bedziesz korzystal roznica jest naprawde mala.
Go to the top of the page
+Quote Post
NuLL
post
Post #12





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Mowie o samym autoloadingu jako procesie porownujac go do zwyklego require_once - generacje map zostawmy w spokoju.
Go to the top of the page
+Quote Post

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: 23.08.2025 - 15:04