Włączanie plików + autoloader, chętnie bym posłuchał ciekawych pomysłów |
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 |
26.02.2005, 12:21:14
Post
#21
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) |
Cytat(hawk @ 2005-02-26 09:55:15) @bela_666: pokaż pokaż pokaż Heh, ale to dopiero brzydko wyglądający prototyp, ale ok Pisałem, aby w ogóle działało
-------------------- |
|
|
26.02.2005, 12:36:56
Post
#22
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) |
Połączyłem kody: bela_666, Nievinny oraz Imperiora i osiągnołem taki efekt:
Ten post edytował Vengeance 26.02.2005, 12:37:36 -------------------- |
|
|
26.02.2005, 12:41:48
Post
#23
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) |
Linia nr 9: zmieniasz ją na:
Kod if(!is_file($oFile->getPathname()) OR $oFile->getFileName == '.svn') Powinno zadziałać -------------------- |
|
|
26.02.2005, 17:03:09
Post
#24
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) |
@Vengeance -> Czy twoim zdaniem ładowanie z mapy powinno być zaimplementowane od razu w __autoload() czy dać jakąś funkcję pośrednią?
OK, a ja myślę, że można to jeszcze przerobić i jeszcze jedno: kiedy należy a kiedy nie robić mapę plików? I czy pozwolisz wykorzystam to w swoim CORE? Zobaczcie coś takiego i oceńcie
Mapa jest tworzona tylko raz, a potem porównywana w pentli foreach? Czy lepiej inaczej, np: Chyba tes sposób lepszy, czy nie? Ten post edytował Nievinny 26.02.2005, 17:25:44 -------------------- |
|
|
26.02.2005, 17:35:25
Post
#25
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) |
Nievinny: chodzi oto, aby mape generować tylko RAZ!! Potem jak coś dodasz/zmienisz dopiero robisz ją ponownie. W moim przypadku robienie mapy zabiera 95% czasu wykonywnia skryptu! Dlatego tak ważnym jest aby wynik był objęty jakimś cache. A czy zrobisz w __autoload() czy w czymkolwiek innym to już nie jest takie ważne
-------------------- |
|
|
26.02.2005, 17:42:59
Post
#26
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) |
Cytat Nievinny: chodzi oto, aby mape generować tylko RAZ!! Potem jak coś dodasz/zmienisz dopiero robisz ją ponownie. W moim przypadku robienie mapy zabiera 95% czasu wykonywnia skryptu! Dlatego tak ważnym jest aby wynik był objęty jakimś cache. A czy zrobisz w __autoload() czy w czymkolwiek innym to już nie jest takie ważne Źle mnie zrozumiałeś, to, że mapa powinna być robiona tylko raz to ja doskonale wiem.... Chodzi mi o samą funkcję __autoload() czy lepsza jest z foreach czy ta druga... Ten post edytował Nievinny 26.02.2005, 17:44:05 -------------------- |
|
|
26.02.2005, 18:15:03
Post
#27
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) |
A po co foreach? Jeszcze opozniac ? To $map[$className] jest takie zle? W sumie to i tak kazdy robi jak mu wygodniej ;]
-------------------- |
|
|
26.02.2005, 18:42:06
Post
#28
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) |
@Vengeance et al: No, bardzo ładny kod . Ja bym dodał parametryzację/konfigurację generatora mapy. Coś takiego jak ma phpdocumentor - jakie katalogi ma przeglądać, jakie pliki ma czytać. Wtedy można sobie zignorować .svn i nie trzeba tego zakodowywać na stałe w kodzie.
A potem tylko zrzucić mapę do jakiegoś pliku php i voila! I na koniec coś takiego:
|
|
|
26.02.2005, 19:07:38
Post
#29
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) |
Ok userzy forum.php.pl "wymyslili" juz idee "routera" (a raczej po prostu to nazwali ladnie). Teraz czas nazwac to co tu razem stworzyliśmy
-------------------- |
|
|
27.02.2005, 12:32:23
Post
#30
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) |
Nazwa: Autoload Class System...
może być, a klasa niezła, tylko, że robi zrzuty przy każdym wywołaniu skryptu a nie ciągnie z cache Pozwolę sobie jeszcze dopisać, cos o systemie cache: 1) Jest absolutnie niezbędny:
Ten post edytował Nievinny 3.03.2005, 14:44:37 -------------------- |
|
|
4.03.2005, 10:29:10
Post
#31
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) |
Ja to rozwiązałem podobnie, jak w nowym Mojavi:
Lista plików jest przechowywana w pliku konfiguracyjnym (ini). Bardzo elastyczne rozwiązanie. Trzeba tylko włączyć klasę ConfigManager - reszta jest ładowana automatycznie. |
|
|
4.03.2005, 10:52:36
Post
#32
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) |
A ja generujesz listę klas? Tu masz od razu generator
-------------------- |
|
|
4.03.2005, 16:34:52
Post
#33
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) |
Lista klas jest w pliku konfiguracyjnym autoload.ini, który wygląda tak:
Cytat [autoload] Class1 = sciezkadopliku Class2 = sciezkadopliku Classn = sciezkadopliku Plik ten jest parsowany do tablicy i następnie chache'owany jako plik .php Muszę przemyśleć Twój sposób ze skanowaniem katalogów... ciekawe Ten post edytował chmolu 4.03.2005, 16:37:08 |
|
|
4.03.2005, 17:26:32
Post
#34
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) |
@chmolu:
1) Z tego co pamietam, w __autoload nie mozna rzucac wlasnych wyjatkow, bo i tak nie beda dzialac. Czyzby bug w Mojavi? 2) Pliki ini sa w tym przypadku zdecydowanie gorsze od tablic php. W pliku ini nie mozna zrobic czegos takiego:
Kazdy, kto bedzie uzywal systemu z plikiem ini, bedzie musial zmienic wszystkie sciezki w tym pliku, bo domyslne nie beda u niego dzialaly. 3) Jaki jest sens kompilowac plik ini do pliku php? Jezeli pliki php sa zdecydowanie szybsze, to dlaczego nie zaczac wlasnie od nich? Dla mnie to jest komplikowanie sobie zycia. |
|
|
4.03.2005, 17:49:43
Post
#35
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) |
Cytat 1) Z tego co pamietam, w __autoload nie mozna rzucac wlasnych wyjatkow, bo i tak nie beda dzialac. Czyzby bug w Mojavi? Wyjątki można wyrzucać, tylko nie mozna ich łapać w catch. Wtedy są uznawane jako fatal error. Cytat Pliki ini sa w tym przypadku zdecydowanie gorsze od tablic php. W pliku ini nie mozna zrobic czegos takiego: ... kazdy, kto bedzie uzywal systemu z plikiem ini, bedzie musial zmienic wszystkie sciezki w tym pliku, bo domyslne nie beda u niego dzialaly. Można zrobić coś takiego. Po prostu trzeba dodawać do każdego wpisu pseudo-stałą, np. Action = %APP_DIR%/modules/actions/action.php. ConfigManager automatycznie zamienia takie 'stałe' na właściwą scieżkę. Cytat 3) Jaki jest sens kompilowac plik ini do pliku php? Jezeli pliki php sa zdecydowanie szybsze, to dlaczego nie zaczac wlasnie od nich? Dla mnie to jest komplikowanie sobie zycia. Wiesz, to jest indywidualna sprawa. Ja przyjąłem, że taka rzecz należy do konfiguracji, a nie do kodu aplikacji. Konfigurację zapisuję w plikach ini. Mogę oczywiście zapisywac od razu w plikach php. Dla mnie jest wygodniej to oddzielić na właściwy kod aplikacji i dane konfiguracji. Wcale nie jest to komplikowanie sobie życia. Całość ogranicza się do funkcji parse_ini_file(), var_export() i fputs(). Zależy, jak kto lubi Ten post edytował chmolu 4.03.2005, 17:53:19 |
|
|
4.03.2005, 18:05:53
Post
#36
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) |
W sumie, skrypt po raz pierwszy zaczyna działanie więc generuje mapę, która jest potem cachowana. Gdy odpalimy skrypt po raz drugi odczyta mapę z cache (zserializowany ciąg + <?php die(); ?> ), usunie te ostatnie i przyśpieszenie jest widoczne
to sprowadza się ogólnie do:
I wg mnie to najprostszy sposób -------------------- |
|
|
5.03.2005, 11:12:31
Post
#37
|
|
Grupa: Zarejestrowani Postów: 105 Pomógł: 0 Dołączył: 16.10.2004 Ostrzeżenie: (0%) |
Cytat(hawk @ 2005-03-04 16:26:32) 1) Z tego co pamietam, w __autoload nie mozna rzucac wlasnych wyjatkow, bo i tak nie beda dzialac. Czyzby bug w Mojavi? Zgadza się, w __autoload nie rzuca się wyjątków, ale mojavi3 nie rzuca go, tylko tworzy (bo tam ma zaimplementowane metody dot. informowania o bledach). PS. Na początku też myślałem, że mają błąd, ale tam throw nie ma -------------------- Com powiedział, powiedziałem.
|
|
|
7.03.2005, 03:36:42
Post
#38
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) |
@chmolu: Faktycznie, obsługa plików ini jest bardzo prosta. Co ciekawe, na początku próbowałem właśnie podejścia z "%APP_DIR%/...". Pliki ini wyglądają lepiej, prościej się je edytuje, trudniej popełnić błąd lub wrzucić niedozwolony kod. Z drugiej strony, trzeba wygenerować z nich pliki php, co samo w sobie jest banalne, ale wymaga sprawdzenia daty modyfikacji, czyli dodatkowego kroku. Wpływ na wydajność jest minimalny i to już chyba kwestia gustu.
|
|
|
7.03.2005, 15:06:38
Post
#39
|
|
Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 15.06.2003 Ostrzeżenie: (0%) |
Pliki ini są wczytywane szybciej niż php gdyż mają specjalny prostszy parser.
Porównajcie soebie a zobaczycie że czasami nawet cechowanie w php trwa dłużej. |
|
|
7.03.2005, 16:07:14
Post
#40
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) |
A czy są szybsze od zserializowanej tablicy, zapisanej w pliku ?
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 23.09.2024 - 09:33 |