![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Zastanwiam się na użyciem __autoload w moim nowy projekcie. Wiem, że na php pro jest wątek na temat optymalizacji __autoload, ale mi zależy na prostym rozwiązaniu bo i projekt jest mały w porywach do średniego.
zrobiłem coś takiego jak poniżej - proste, że aż boli, ale o to chodzi:
Jak widać rozwiązanie polega na wszytaniu wszystkich potencjalnych katalogów, w których znajdują się klasy php i następnie przeszukaniu ich w poszukiwaniu danej klasy. Docelowo w projekcie będzie jakieś +/- 200 klas w 8-10 katalogach. Czy to rozwiązanie jest "ok" czy raczej niezbyt racjonalne - chodzi oczywiście o wydajność. Nie wiem jaki jest koszt przeszukania kilku katalogów - może lepiej zrobić mniej katalogów? Co o tym myślicie. Dodam, że wolałbym uniknąć mapowania plików w tablicach itp - chodzi mi o bardzo proste i w miarę wydajne rozwiązanie. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat wolałbym uniknąć mapowania plików w tablicach Kiedy to wydaje się być lepszym rozwiązaniem. Jeżeli napiszesz prosty system, to nie narazisz się na duże straty wydajności. Tak jak napisano w wątku dot. autoloaderów, __autoload nie zapycha serwera, jeżeli jest dobrze napisany. Przynajmniej tak jest w przypadku mapowania klas. -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Tylko tutaj powstaje pytanie jaka jest graniczna wielkość aplikacji, kiedy to przestaje być sztuka dla sztuki. Czy 200 plików i taki system jak ja pokazałem przy średnio odwiedzanej witrynie rzeczywiscie "zapycha" serwer - w sensie czy generuje "zauważalny" wzrost pracy serwera?
Wiem że trudno to jakoś arbitralnie określić - są różne serwer, ale czy ogólnie takie podejście jak moje stanowi rzeczywisty problem. Oczywiste jest, że przy dużych systemach - typu framework - takie rozwiązanie nie ma racji bytu, ale czy jest sens tworzyć rozbudowane rozwiązanie dla małej/średniej witryny? |
|
|
![]()
Post
#4
|
|
![]() Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
Mój autoloader działa troche inaczej.
Mianowicie został w nim zastosowany mechanizm liczacy ile razy dana plik jest potrzebny, jezeli wychodzi wiecej niz 80% automatycznie na starcie sobie je dolacza. Ogolnie to pratycznie nie wykorzystuje __autoload() wole stosowac include wtedy kiedy wiem ze cos jest potrzebne |
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
wow, zaimplementowales moja idee, chyba ja prezentowalem w tamtym watku
![]() -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Hwao a czy kod Twojego rozwiązania jest na licencji GPL lub pokrewnej ?
![]() A wracając do pytania to czy moje rozwiązanie jest : a) Złe ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
@athabus - przy niewielkiej liczbie potencjalnych lokalizacji (najlepiej jednej) i malym projekcie to za duzej roznicy nie ma, jednak musisz sobie zdawac sprawe z tego, ze im wiecej podasz lokalizacji tym wiecej kazdorazowej niepotrzebnej pracy dla serwera. Moze zrob cos w rodzaju caschu. Pliki raz znalezione zapisuj w mapie i wyszukiwanie zaczynaj wlasnie od tej mapy, a jak dany plik nie znajduje sie w mapie lub podana jest bledna lokalizacja to przystepuj do przeszukiwania katalogow.
Tak na marginesie wspomne, ze z takiego jak ty masz rozwiazania skorzystali programisci Zenda we FrontControlerze, ktory poszczegolnych plikow z kontrolerami (klasami grupujacymi akcje) poszukuja wlasnie we wczesniej wskazanym katalogu. -------------------- bigZbig (Zbigniew Heintze) | blog.heintze.pl
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Pliki raz znalezione zapisuj w mapie i wyszukiwanie zaczynaj wlasnie od tej mapy, a jak dany plik nie znajduje sie w mapie lub podana jest bledna lokalizacja to przystepuj do przeszukiwania katalogow. Hmm czemu sam na to nie wpadłem - proste, elastyczne i w miarę wydajne... Za mało kawy chyba ![]() Dzięki za pomysł - tak właśnie zrobię. //edit zrobilem takie proste rozwiazanie, moze ktos madry rzuci okiem Klasa jest singeltonem - dzieki temu nie trzeba wielokrotnie odczytywac i zapisycwac zmian -> zamiast tego jest flaga isChanged, ktora okresla czy destruktor ma zapisac plik z cachem sciezek. @bigZbig Nie wiem czy dokladnie o to Co chodzilo, ale i tak jest to chyba lepsze rozwiazanie niz moj pierwszy post. Kod Autoloadera A tutaj przyklad uzycia - > specjalnie przeszukanie plikow wywalilem do __autoload i nie zawarlem w klasie, gdyz uznalem ze tak bedzie bardziej elastycznie
Kod jeszcze nie był specjalnie mocno testowany, ale wydaje się działać poprawnie. Będę wdzięczny za wszelkie sugestie |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 597 Pomógł: 30 Dołączył: 19.02.2003 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
@athabus: mam cos podobnego, tyle, ze heh, nei bardzo rozumiem idee wpychania na sztywno katalogow wewnatrz funkcji
wg. mnie lepiej zrobic tak na poczatku aplikacji :
i potem w autload:
} Ten post edytował sf 25.08.2006, 12:46:02 -------------------- Zapraszam na mój php blog, tworzenie stron.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Sam nie wiem, generalnie chodziło mi o to, że u mnie autoloader to w zasadzie kontener na mapę scieżek. Funkcja __autoload okresla wzor budowy pliku php i sciezki - nie chciałem też za każdym razem przekazywać wszystkich scieżek do Autoloadera, skoro i tak będzie z nich korzystał sporadycznie. No ale to taki szczegół. Twoje podejście jest bardziej zgodne z paradygmatem obiektowym.
//edti czy ja dobrze rozumiem ze ty za pomoca funkcji eksport() zwracasz tablice ze sciezkami. Bo tak sie zastanawiam, co się dzieje jak zmieniasz polozenie katalogu. U mnie obiekt jest odpowiedzialny za to czy dany plik istnieje -> jesli nie istnieje we wskazanej lokalizacji to autaomatycznie lista sciezek jest aktualizowana. Jak to działa u Ciebie? Ten post edytował athabus 25.08.2006, 10:26:00 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 597 Pomógł: 30 Dołączył: 19.02.2003 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Tak, export zwraca tablice sciezka => tabica z lista klas, sciezka => tablica z lista klas. I te tablice z lista klas laduja mniej wiecej takie pliki :
Ten post edytował sf 25.08.2006, 12:48:20 -------------------- Zapraszam na mój php blog, tworzenie stron.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:02 |