Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
![]() ![]() |
Post
#121
|
|
|
Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków |
Cytat(squid @ 2006-01-17 14:12:04) co nazywacie mapa? Czy jest to skojarzona z klasa sciezka dostepu (dla kazdej klasy)? Mapa to 'lista' scieżek i nazwy klas. dajmy na to (posłuże się autoloaderem z phienda2):
pozdrawiam |
|
|
|
Post
#122
|
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%)
|
NuLL, pytanie moje brzmi, czy każdy komponent może pracować oddzielnie? Tzn robisz ctrl c, v, wrzucasz do innego katalogu i działa.
Btw. co Ty masz w tych komponenach? |
|
|
|
Post
#123
|
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%)
|
bela_666 - moze, nie wszystkiego bo czesc jest zalezna od Db dla przykladu.
Co mam ? Db, Cache, Configuration, Template, Debug, Image itp itd. - Cala aplikacja krotko mowiac. |
|
|
|
Post
#124
|
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%)
|
@NULL: IMHO rozwiązaniem problemu ze zbyt dużą liczbą wpisów jest sklejenie tego we większe pliki. Autoloadowanie tego wszystkiego zajmuje jednak sporo czasu. Ideałem jest dla mnie rozwiązanie, gdy po ustaleniu, jakie komponenty są nam potrzebne, robimy z tego wersję release pakując automatycznie do jednego pliku i tak dystrybuujemy. Lokalnie mamy wersję dev z rozbiciem na małe pliki, a dzięki autoloaderowi cała operacja jest przezroczysta - mamy tylko inną mapę. Natomiast plików specyficznych dla konkretnego żądania, np. klas akcji, nie warto pakować do mapy, bo by się zbyt duża zrobiła.
|
|
|
|
Post
#125
|
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%)
|
Cytat(hawk @ 2006-01-24 09:54:37) @NULL: IMHO rozwiązaniem problemu ze zbyt dużą liczbą wpisów jest sklejenie tego we większe pliki. Autoloadowanie tego wszystkiego zajmuje jednak sporo czasu. Ideałem jest dla mnie rozwiązanie, gdy po ustaleniu, jakie komponenty są nam potrzebne, robimy z tego wersję release pakując automatycznie do jednego pliku i tak dystrybuujemy. Lokalnie mamy wersję dev z rozbiciem na małe pliki, a dzięki autoloaderowi cała operacja jest przezroczysta - mamy tylko inną mapę. Natomiast plików specyficznych dla konkretnego żądania, np. klas akcji, nie warto pakować do mapy, bo by się zbyt duża zrobiła. takie rozwiazanie jest kosztowne o tyle ze trzeba napisac cos na ksztalt kompilatora i linkera, ktory zajmnie sie przerobieniem wersji dev na produkcyjna. Nie jest moze to duzy problem bo napisanie to operacja jednorazowal ale zawsze po bokonaniu zmian przeba bedzie uzyc czegos co na nowo zapakuje nam klasy w pliki i wydaje mi sie ze jest to duzo zbednej i nikomu niepotrzebnej roboty zwlaszcza ze narzut czasowy zwiazany z dolaczaniem kolejnych plikow da sie zniwelowac w sosobo o jakim mowilem. Jest to rozwiaznie darmowe wydajne i nie trzeba niczego zmieniac w istniejacych projekatach. Abstrachujac od tego co powiedzialem wczesniej, mam tu prosty przyklad na wykorzystanie funkcji __autoload(): autoload.lib.php:
a.class.php:
katalog_b.class.php:
proste i pozwala na zdefiniowanie jednej prostej f-cji kotra zajmie sie sama wlaczaniem klas jesli taki nie zostaly jeszcze dolaczone. Sposob nazewnistwa jest oczywiscie umowny i mozna stosowac dla rozroznienia katalogow i plikow male i wielkie litery lub cokolwiek innego. Mozna tez trzymac tablice globalna z plikami ktore juz zaladowalismy i sprawdzac czy oplaca sie uzyc f-cji *_once (to juz bylo chyba wspomniane), chociaz nie wiem czy jest sens bo jesli plik jest juz zaladowany to f-cja __autoload() nie zostanie wywolana. Co jest tu problemem? Zewnetrzne pakiety i klasy na ktorych nazewnictwo i polozenie nie mamy wplywu. Moze tutaj zwykly include_path rozwiazalby problem? Napewno wystarcza to do PEAR co do innych pakietow to chyba tak czy siak trzeba rozpatrywac to osobno bo napewno autorzy kody przewidzieli swoje sosoby dolaczania innych klas itp. Co o tym myslicie? EDIT: idac dalej mozna zadbac rowniez o wlaczanie interfejsow i wyjatkow w podobny sposob:
oczywiscie zmienne mozna ladowac z jakiegos configa ale mamy teraz wszystko co potrzeba nam do automatycznego ladowania klas Ten post edytował squid 16.02.2006, 15:39:42 |
|
|
|
Post
#126
|
|
|
Grupa: Zablokowani Postów: 46 Pomógł: 0 Dołączył: 12.01.2006 Ostrzeżenie: (10%)
|
Cytat(DeyV @ 2005-02-10 20:46:51) Cytat Takie mapy można nawet generować automatycznie przeszukując skryptem katalogi i parsując (tokenizując) pliki php. Co oznacza pojęcie tokenizując w programowaniu? Token to symbol... w wolnym tłumaczeniu. Cytat Aby sprawę jeszcze bardziej skomplikować - warto pamietać o tym - że require_once i inlude_once jest w rzeczywistości bardzo wolne A więc co polecasz? Najlepiej stosować samo: require i include? Czy może jeszcze coś innego? |
|
|
|
Post
#127
|
|
|
Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%)
|
Cytat(eMartio @ 2006-03-31 19:40:31) Co oznacza pojęcie tokenizując w programowaniu? Token to symbol... w wolnym tłumaczeniu. Google dzisiaj nie działa? http://google.com/search?q=define:tokenize |
|
|
|
Post
#128
|
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%)
|
Cytat(eMartio @ 2006-03-31 20:40:31) Cytat Takie mapy można nawet generować automatycznie przeszukując skryptem katalogi i parsując (tokenizując) pliki php. Co oznacza pojęcie tokenizując w programowaniu? Token to symbol... w wolnym tłumaczeniu. Sam tłumaczysz sobie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) To jest rozbicie pliku źródłowego na tablice symboli. Jest to pierwszy etap analizy kodu źródłowego. Więcej, google: kompilator i interpretator |
|
|
|
Post
#129
|
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%)
|
Czy ktos moze wykonywal testy po jakims ciezkim obciazeniem aplikacji pracujacej na autoloaderze i bez niego ? Chetnie bym posluchal jakis opinii. Wiem ze jest to dosc wolne ale czy az tak (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Zastanawia mnie tak kwiestia jakoze zalozmy Panowie z ez.no postanowili w eZ Components jechac na autoloadzie napewno zdajac sobie sprawe z problemu wydajnosci (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Co sadzicie o tym ? Pisac z __autoload() czy bez ? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) |
|
|
|
Post
#130
|
|
|
Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%)
|
Ja osobiście wszystko mam przygotowane pod autoloadera. Co z wydajnością? Przy cache mapy klas i włączonym xdebugu załadowanie wszystkich klas i systemu zajmuje ok. 35ms, a samo nawiązanie połączenia przez PDO z PostgreSQL na localhoście ok. 230, więc strata wydajności nie jest duża. Z tych 35ms połowa to require_once. Myślę, że nie jest to zbyt duża strata wydajności w porównaniu do ułatwienia pisania kodu.
Na poważnych serwerach kod zenda jest i tak trzymany w pamięci, więc straty są jeszcze mniejsze. |
|
|
|
Post
#131
|
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%)
|
przy dobrym projekcie autoloadera mozna ominac f-cje *_once mozna podniesc wydajnosc tak ze autoloadowanie bedzie praktycznie niezauwazalne
|
|
|
|
Post
#132
|
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%)
|
@Ludvik - dzieki za wiesci - o cos takiego mi chodzilo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Teraz tylko czekac na otwarty autoloader od eZ components i po bolu.
|
|
|
|
Post
#133
|
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%)
|
To ciekawe co mówicie, bo w mojej aplikacji autoload() zajmował 98% czasu wykonywania (tak, tak... i to już z cache mapy w pliku!). Wróciłem do require_once. Zresztą takie rozwiązanie jest dużo czytelniejsze przy późniejszej analizie kodu. Wiadomo gdzie co jest trzymane (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
|
|
|
|
Post
#134
|
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%)
|
To ciekawe co mówicie, bo w mojej aplikacji autoload() zajmował 98% czasu wykonywania (tak, tak... i to już z cache mapy w pliku!). Wróciłem do require_once. Zresztą takie rozwiązanie jest dużo czytelniejsze przy późniejszej analizie kodu. Wiadomo gdzie co jest trzymane (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) pewnie te 98% czasu zajmowalo wlaczenie analiza i interpretacja kodu co chyba nie jest rownowazne z narzutem czasu samego autoloadera. P.S. Obecnie nie mam czasu ale za klika tygodni postawie odizolowana maszyne i przeprowadze profilowanie zeby sprawdzis te teorie |
|
|
|
Post
#135
|
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%)
|
Ja tez uzywam autoloadera, ale nie tworze jednej globalnej tablicy, a juz napewno nie generuje jej automatycznie. Staram się tworzyć pakiety. Kazdy pakiet ma swoj plik inicjalizacyjny, w ktorym jest m.in. mapa klas. Jesli dolaczam dany moduł (pakiet) do aplikacji poprzez includowanie jego pliku inicjalizujacego to juz mechanizm zawarty w tym pliku zajmuje się dołączeniem mapy klas danego pakietu do ogolnej mapy klas całej aplikacji na ktorej operuje funkcja __autoload. Dla wygody testowania zaimplementowalem tez mozliwosc ominiecia autoloadera. Tracę tym może nieznacznie na wydajności, ale znacznie zyskuję na wygodzie. Poniższy przykład ilustruje to o czym pisałem:
@Vengeance - wybacz, ale wydaje mi sie, że jednak się mylisz. Bo jeśli używając funkcji __autoload dołączam potrzemne pliki przy pomocy instrukcji include, lub require, a Ty posługujesz się require_once lub include_once to zadaj sobie pytanie co jest bardziej wydajne. Czy narzut czasowy potrzebny dla samego wywołania funkcji autoladujacej jest faktycznie tak duży? Poza tym autoloader dolancza jedynie te pliki, ktore sa wymagane, a zastosowanie bezposrednio *_once dołącza zawsze wszystkie pliki - nawet jesli ich zawartość nie jest w danym wywołaniu potrzebna. Ten post edytował bigZbig 12.06.2006, 08:05:51 |
|
|
|
Post
#136
|
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%)
|
Jakie argumenty by tu nie padały, i tak nic nie zmieni mojego "self experience" gdzie Zend pokazywał 98% dla samego autoloadu.
Ja nie twierdze, że ta metoda jest cool, albo że jest do dupy. Mówię tylko, że z początku stosowałem ją ale zrezygnowałem. Jednym z argumentów przeciw jest choćby czytelność kodu (z mojego punktu widzenia). Że już nie wspomne o np. umiejetnośći podpowiadania składni w edytorach :] Które bardzo mocno wspierają się na include i require w kodzie... a autoload powoduje oduczenie ich umiejętności poprawnego podpowiadania. |
|
|
|
Post
#137
|
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%)
|
Argument o czytelności kodu do mnie nie przemawia bo wszystkie pliki dolanczam (dokladam do mapy klas) w scisle okreslonych miejscach. W plikach poszczegolnych klas nie ma miejsca na dolanczanie zaleznosci jak np. definicje wyjatkow. Od tego mam plik inicjalizujacy dany pakiet i jest to wygodne. W zasadzie przy takim podejsciu to nie ma znaczenia czy uzyjesz autoloadera, czy bezposrednio require.
Wada tego rozwiazania jest oczywiscie to, ze chcac uzyc tylko jednej klasy z calego pakietu musisz sie upewnic czy do jej dzialania nie jest wymagana obecnosc jakiegos innego pliku. Co do edytorow i podpowiadania skladni - argument wart przemyslenia. Tak swoja droga jakiego edytora uzywasz? |
|
|
|
Post
#138
|
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%)
|
Cytat Że już nie wspomne o np. umiejetnośći podpowiadania składni w edytorach :] Które bardzo mocno wspierają się na include i require w kodzie... a autoload powoduje oduczenie ich umiejętności poprawnego podpowiadania. W Zendzie nie ma z tym problemu. |
|
|
|
Post
#139
|
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%)
|
witam
eclipse przechowuje informacje o wszystkich klasach w cache ... więc w nim nie ma problemu z używaniem metod z obiektów nie włączonych jawnie do kodu ... używam autoloadera z mapą i uważam że jest to bardzo wydajne i wygodne rozwiązanie ... jak mi się uda to włączę xdebuga na jakimś serwerze u mnie w pracy i zrobię testy i profilowanie na żywej aplikacji (ale to po długim weekendzie dopiero) pozdrawiam |
|
|
|
Post
#140
|
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%)
|
Ja generuje sobie mapę przy instalacji aplikacji. Zapisuje w pliku tekstowym z zakodowanym serialize();
Mapa wyglada tak: Kod Array ( [Action] => Array ( [Dir] => Actions/ [Elements] => Array ( [ImageFunctions] => Array ( [Dir] => Image/ [Class] => Array ( [ImageHandler] => Array ( [file] => Img.Handler.php [SubDir] => ) [ImageDraw] => Array ( [file] => Img.Handler.php [SubDir] => ) ) ) [SessionHandler] => Array ( [Dir] => Session/ [Class] => Array ( [Session] => Array ( [file] => Session.Handler.php [SubDir] => ) ) ) ) ) [Core] => Array ( [Dir] => Core/ [Elements] => Array ( [View] => Array ( [Dir] => View/ [Class] => Array ( [view] => Array ( [file] => view.php ) [View] => Array ( [SubDir] => ) ) ) ) ) [Plugin] => Array ( [Dir] => Plugins/ [Elements] => Array ( [DBHandler] => Array ( [Dir] => DbHandler/ [Class] => Array ( [mySQL] => Array ( [file] => Db.MySql.php [SubDir] => ) [pgSQL] => Array ( [file] => Db.pgSql.php [SubDir] => ) ) ) ) ) ) AutoLoader robie na 2 sposoby. 1. Szukam klasy w mapie i includuje ja sprawdzajac czy taki plik istnieje 2. Szukam Calego modulu Np ImageFunctions i includuje wszystkie klasy [nie Classy] z tej mapy. -- "klasy" dr_bonzo Ten post edytował dr_bonzo 5.08.2006, 17:21:26 |
|
|
|
![]() ![]() |
|
Aktualny czas: 21.11.2025 - 00:11 |