Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

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.

> Włączanie plików + autoloader, chętnie bym posłuchał ciekawych pomysłów
hawk
post 10.02.2005, 17:23:52
Post #1





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

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


Problem stary jak świat: system wymaga włączenia sporej liczby plików i zarządzanie tym jest upierdliwe. Do tego nie należy włączać więcej kodu niż potrzeba, a najlepiej zrobić jakieś lazy load.

Oczywiście, technik jest wiele:

1) require_once rozsiane po plikach, najlepiej poprzedzone jakąś stałą, np. require_once ROOT_DIR . '/foo/Foo.class.php';

2) Prado: deklarujemy namespacy - np. za pomocą funkcji using(), co dodaje nam ścieżki do include_path, a potem niech php znajdzie klasę.

3) Autoloader + mapa (nazwa klasy => ścieżka do pliku); autoloader wczytuje mapę i na jej podstawie jest w stanie znaleźć każdą klasę

Są jeszcze jakieś inteligentne sposoby? Dobry mechanizm powinien być odporny na "przemeblowanie" struktury plików (np. chcemy połączyć kilka klas w jeden plik).

BTW, włączanie plików bez klas (tylko funkcje i kod) jest gorsze, bo nie ma tego czegoś, czego można szukać po plikach... kolejna zaleta OOP? winksmiley.jpg
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sagnitor
post 5.07.2011, 12:53:10
Post #2





Grupa: Zarejestrowani
Postów: 34
Pomógł: 3
Dołączył: 29.05.2011

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


Być może uznacie mnie za archeologa, ale temat był wg. mnie bardzo ciekawy, a przez 4 lata od ostatniego postu mogło się wiele rzeczy zmienić.
Czytając tą dyskusję doszedłem do dwóch wniosków.

Są dwie najbardziej 'wydajne' metody autoloadu plików w projekcie:
- mapper generujący tablicę ze skojarzonymi nazwami klas wraz z ich ścieżkami + autoloader bazujący na tych mapach,
- konwencja nazewnictwa PSR-0, polegająca na używaniu przestrzeni nazw w taki sposób, aby wskazywały na plik klasy.

Oba sposoby posiadają zalety i wady. Pierwszy wykorzystujący mapy jest bardziej elastyczny w stosunku do drugiego. Właściwie niezależnie jaką strukturę katalogów przyjmiemy, mapper przeskanuje nam ją i zwróci odpowiedni plik. Głównym problemem jest wielkość wczytywanej mapy, która niekoniecznie musi być wykorzystana w całości (jednak z każdym żądaniem musi być wczytana do zmiennej klasy). Sugestiami co do tego problemu jest rozbicie mapy na mniejsze 'podkategorie'.

Drugi sposób wydaje się bardziej wydajny w większy aplikacjach, gdzie ilość plików przekracza kilka setek. W tym przypadku, aby załadować klasę nie musimy wczytywać nic z zewnątrz co mogło by obciążyć aplikację. Posługujemy się tutaj przestrzenią nazw. Obiekt w swojej nazwie zawiera ściężke do pliku, w którym znajduje się klasa. Wymogiem jest tutaj odpowiednie nazewnictwo oraz zorganizowana struktura katalogów.

Od tamtej pory wiele rzeczy mogło się zmienić, dlatego zachęcam do dalszej dyskusji. Mnie głównie nurtuje rozwiązanie sposobu pierwszego, aby był on wydajny nawet przy większych systemach.

Pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie
- hawk   Włączanie plików + autoloader   10.02.2005, 17:23:52
- - hawk   @serafin: Trochę konsekwencji. Bardzo się starasz,...   17.06.2005, 08:44:59
- - matid   Korzystam z debug_backtrace" title="Zobacz w manua...   17.06.2005, 10:31:38
- - Imperior   Cytat(matid @ 2005-06-17 06:42:50)Chyba jedna...   17.06.2005, 15:12:25
- - matid   [PHP] pobierz, plaintext <?php class Test1 exte...   17.06.2005, 15:41:10
- - bela_666   Fajna bajeczka : http://groups.google.pl/groups?q=...   17.06.2005, 20:35:56
- - Imperior   Cytat(matid @ 2005-06-17 14:41:10)Jak wczytuj...   17.06.2005, 23:03:25
- - squid   Jeszcze nie przeczytalem calego tematu wiec sory j...   8.08.2005, 12:56:24
- - hawk   Tak naprawdę to wszystkie interfejsy powinno się w...   8.08.2005, 21:39:27
- - Vengeance   Wywalić interfejsy? A niby z jakiej racji? Przecie...   8.08.2005, 22:56:24
- - NuLL   @Hawk - napisać parser plików który będzie usuwał ...   8.08.2005, 23:02:05
- - matid   Jeśli kod jest wydany na zasadach OpenSource to mi...   9.08.2005, 07:36:32
- - hawk   Ale ja mówię o dwóch wersjach kodu: debug i releas...   9.08.2005, 14:25:03
- - chmolu   No jakoś mi się nie widzi usuwanie w kodzie ...   9.08.2005, 14:59:17
- - squid   Cytat(chmolu @ 2005-08-09 15:59:17)No jakoś m...   9.08.2005, 15:12:26
- - NuLL   Macie może jakiś pomysł co zrobić z autoloaderem k...   17.01.2006, 11:49:38
- - bigZbig   Mozna zastosowac cos w rodzaju przestrzeni nazw. W...   17.01.2006, 12:18:57
- - NuLL   Ja cos takiego robie tzn mam ezcCacheStorageFileAr...   17.01.2006, 12:23:08
- - bela_666   A po co rozbijac? Ja mam kilkaset linijek i smiga....   17.01.2006, 12:57:03
- - squid   co nazywacie mapa? Czy jest to skojarzona z klasa ...   17.01.2006, 13:12:04
- - NuLL   CytatA po co rozbijac? Ja mam kilkaset linijek i s...   17.01.2006, 13:18:13
- - Ociu   Cytat(squid @ 2006-01-17 14:12:04)co nazywaci...   17.01.2006, 14:28:28
- - bela_666   NuLL, pytanie moje brzmi, czy każdy komponent może...   17.01.2006, 19:16:03
- - NuLL   bela_666 - moze, nie wszystkiego bo czesc jest zal...   17.01.2006, 20:06:44
- - hawk   @NULL: IMHO rozwiązaniem problemu ze zbyt dużą lic...   24.01.2006, 08:54:37
- - squid   Cytat(hawk @ 2006-01-24 09:54:37)@NULL: IMHO ...   14.02.2006, 13:34:38
- - eMartio   Cytat(DeyV @ 2005-02-10 20:46:51) CytatTakie...   31.03.2006, 19:40:31
- - matid   Cytat(eMartio @ 2006-03-31 19:40:31)Co oznacz...   31.03.2006, 20:25:42
- - bela_666   Cytat(eMartio @ 2006-03-31 20:40:31)CytatTaki...   31.03.2006, 20:51:29
- - NuLL   Czy ktos moze wykonywal testy po jakims ciezkim ob...   27.05.2006, 16:52:38
- - Ludvik   Ja osobiście wszystko mam przygotowane pod autoloa...   27.05.2006, 21:44:26
- - squid   przy dobrym projekcie autoloadera mozna ominac f-c...   27.05.2006, 22:19:50
- - NuLL   @Ludvik - dzieki za wiesci - o cos takiego mi chod...   28.05.2006, 15:16:33
- - Vengeance   To ciekawe co mówicie, bo w mojej aplikacji autolo...   10.06.2006, 17:38:21
|- - squid   Cytat(Vengeance @ 10.06.2006, 18:38 ) To ...   10.06.2006, 19:07:47
- - bigZbig   Ja tez uzywam autoloadera, ale nie tworze jednej g...   12.06.2006, 08:04:11
- - Vengeance   Jakie argumenty by tu nie padały, i tak nic nie zm...   12.06.2006, 13:46:28
- - bigZbig   Argument o czytelności kodu do mnie nie przemawia ...   13.06.2006, 06:52:15
- - NuLL   CytatŻe już nie wspomne o np. umiejetnośći podpowi...   13.06.2006, 16:36:42
- - orson   witam eclipse przechowuje informacje o wszystkich...   13.06.2006, 17:37:21
- - eai   Ja generuje sobie mapę przy instalacji aplika...   5.08.2006, 16:28:49
- - squid   "bigZbig dla kaydego pakietu musisy kopiowac ...   5.08.2006, 16:44:16
- - mtod   Przepraszam, ale nie doczytałem tego wątku od desk...   8.08.2006, 16:21:45
- - lukir   Mógłby ktoś z was podsumować wszystkie te rozważan...   8.08.2006, 23:27:40
- - mtod   @lukir: nie rozumiem, jak to: "nowych"?   9.08.2006, 11:57:53
- - lukir   @mtod: na podanej przez Ciebie stronce jest napisa...   12.08.2006, 10:24:01
- - Ludvik   Wtedy ten autoloader straci na wydajności. Każdora...   12.08.2006, 10:30:55
- - squid   wracajac do wydajnosci __autoload() to wspomniane ...   12.08.2006, 11:09:43
- - Denver   Ja, wykorzystując ujednolicone nazewnictwo klas, k...   18.08.2006, 22:52:45
- - LBO   Bardzo przydatne przy pisaniu autoloadera mogą być...   16.01.2007, 20:23:45
- - dr_bonzo   CytatSkoro autoloader w zamierzeniu istnieje dla ł...   16.01.2007, 21:57:56
- - LBO   Ten exit() to tylko przykład, nie mający...   16.01.2007, 22:06:02
- - NuLL   CytatChodzi o sam fakt, że model obiektowy php dop...   17.01.2007, 15:13:32
- - athabus   Ja napisałem sobie prosty autoloader - szczerze mó...   17.01.2007, 16:08:59
- - bigZbig   Problem z mapą obrazków jest tylko taki, że za każ...   17.01.2007, 16:52:03
- - athabus   W zf jest to bardzo fajnie rozwiązane - tu się zgo...   17.01.2007, 17:18:00
- - J4r0d   Przeczytałem cały wątek (trochę czasu to zajęło) i...   18.01.2007, 00:50:57
- - dr_bonzo   CytatCzy warto jeszcze kodować jakimś algorytmem z...   18.01.2007, 01:06:33
|- - J4r0d   Cytat(dr_bonzo @ 18.01.2007, 01:06:33...   18.01.2007, 01:16:20
- - dr_bonzo   CytatDalej zastanawiam się czy nie lepiej ładować ...   18.01.2007, 09:09:06
- - cadavre   Ja nazywam klasy nazwa_klasy.class.php - to chyba ...   18.01.2007, 16:52:08
- - DjKermit   Witam. Ja wykombinowałem coś takiego: Klasa: [PHP]...   22.01.2007, 12:26:38
- - hwao   Bardzo ładna klasa, mi się podoba - jakbym stosowa...   23.01.2007, 18:14:47
- - DjKermit   Dzięki bardzo. Cytat(hwao @ 23.01.2007, 18...   23.01.2007, 18:28:59
- - Turgon   Hmm... Klasa ciekawa i sporo wyjaśnia Dzi...   23.01.2007, 18:32:35
- - bigZbig   Ja nazywam swoje klasy zgodnie z konwencją przyjęt...   24.01.2007, 16:19:57
|- - DjKermit   Cytat(bigZbig @ 24.01.2007, 16:19:57 ...   25.01.2007, 17:52:44
- - Turgon   bigZbig: Podobno szybsze jest Ale zastanowię się ...   25.01.2007, 15:51:37
- - bigZbig   Jak init może być szybsze od tablicy skoro parsują...   25.01.2007, 19:34:40
- - LBO   hmmm, parsowanie to parsowanie... i "na oko...   25.01.2007, 19:49:48
- - Turgon   Ja zapisuje zserializowaną tablicę i działa sprawn...   25.01.2007, 20:23:36
- - Strzałek   O autoloadzie oraz przykładowa klasa generująca ma...   20.02.2007, 09:29:17
- - Sh4dow   Mnie zastanawia ile samo odwolanie sie do funkcji ...   1.03.2007, 12:58:38
|- - J4r0d   Cytat(Sh4dow @ 1.03.2007, 12:58:38 ) ...   1.03.2007, 13:05:04
- - athabus   Wydaje mi się, że troszeczkę dochodzimy do granic ...   1.03.2007, 13:34:02
- - grzegorzr   uuu, temat trochę się zakurzył post...   14.07.2007, 06:10:01
- - Ludvik   Chce Ci się pisać te mapy w YAML? Bo nie widzę sen...   14.07.2007, 09:29:16
- - deirathe   [PHP] pobierz, plaintext <?phpfunction __autolo...   19.07.2007, 18:32:24
- - athabus   Ta funkcja wymaga aby wszystkie klasy były w jedny...   20.07.2007, 11:52:43
- - Turgon   athabus: W takim przypadku mapy się wydają być jed...   20.07.2007, 22:11:45
- - athabus   wiem i sam właśnie map używam   20.07.2007, 22:31:07
- - kaniagandzowski   W klasie ClassLoader autora DjKermit brakuje warun...   27.08.2007, 18:05:25
- - Sagnitor   Być może uznacie mnie za archeologa, ale temat był...   5.07.2011, 12:53:10
- - by_ikar   CytatOba sposoby posiadają zalety i wady. Pierwszy...   5.07.2011, 13:29:25
- - Sagnitor   Nie zaznaczyłem tego w swojej wypowiedzi, ale właś...   5.07.2011, 13:39:31
- - Crozin   Zacznijmy od tego, że w niewielkich projektach wyd...   5.07.2011, 13:51:01
- - by_ikar   W tym temacie jeden z użytkowników zamieścił właśn...   5.07.2011, 14:38:53
- - Sagnitor   @Crozin Twój sposób numer dwa byłby bardzo dobry ...   6.07.2011, 10:52:46
- - Crozin   @Sagnitor: Nie widzę większych problemów:[PHP] pob...   6.07.2011, 11:17:27
- - Sagnitor   Problem jest kiedy niektórzy piszą w ten sposób: ...   6.07.2011, 11:26:29
- - Zyx   Sagnitor -> mapa nie wyklucza stosowania konwen...   13.07.2011, 10:14:52
- - wookieb   A to nie wystarczy już http://pl2.php.net/manual/p...   13.07.2011, 10:36:11
- - Zyx   Jak najbardziej wystarczy, tylko trzeba pamiętać o...   13.07.2011, 11:12:50
- - Hellz   Dlaczego nie trzymać mapy autoloadera w memcached,...   13.07.2011, 18:01:10
- - Zyx   Bo jest kilka razy wolniejszy od APC*, a sama mapa...   14.07.2011, 18:47:00
- - Hellz   Cytatco nie powinno dziwić, jeśli weźmiemy pod uwa...   14.07.2011, 23:38:34
- - Zyx   Wykorzystanie gniazd uniksowych niewiele Ci da. Tr...   16.07.2011, 12:20:44
2 Stron V  < 1 2


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 Wersja Lo-Fi Aktualny czas: 1.06.2024 - 22:50