Dziś jest piątek, 9 stycznia 2009 roku (z kalendarza...)

Preprocesor dla PHP

Icon

20.10.2006, 17:28

PHP

Komentarze (9)

Powrót

Tworząc rozbudowaną aplikację PHP stajemy przed dylematem: pójść w stronę wydajności czy elastyczności? Elastyczność daje ogromne możliwości konfiguracyjne i od tej strony ma sporo zalet, ponadto w naturalny sposób wymusza dobre zorganizowanie całego projektu. Jednak kod PHP porozrzucany jest tutaj po wielu plikach, a szereg warstw abstrakcji pośredniczących w przepływie danych może skutecznie spowolnić całość. Z drugiej strony wydajność da się uzyskać tylko kosztem elastyczności.

Rozdźwięk ten jest widoczny szczególnie przy pisaniu ogólnodostępnej aplikacji, gdzie trzeba zachować odpowiednie proporcje. Niestety, ciężko sprawić, aby skrypt był szybki, załączając tysiące plików, ciężko też z tych plików zrezygnować, biorąc pod uwagę ilość konfiguracji, na jakich aplikacja może pracować. Myślę jednak, iż istnieje pewne wyjście z tego błędnego koła, wymagające wprawdzie zmiany sposobu myślenia o projekcie, ale zawsze.

Pomysł polega na napisaniu dla naszej aplikacji normalnego preprocesora sprzężonego z instalatorem. Instalator wykrywa parametry systemu, dodatkowo pyta użytkownika o parę rzeczy i na podstawie tego z posiadanych rozbitych plików PHP składa jedno, monolityczne jądro, w którym na stałe znajduje się to, co trzeba wczytywać za każdym razem. Analogiczny preprocesor można sprzęgnąć z panelem administracyjnym, aby dać możliwość zmiany ustawień już po zainstalowaniu skryptu. Powstaje pytanie, jak na czymś takim wobec tego pracować w trakcie tworzenia projektu? Cóż, potrzebna byłaby faktycznie potrzebna jeszcze autoładowarka potrafiąca dynamicznie dołączać poszczególne części. Jeszcze jedną rzeczą wartą zastanowienia jest analiza, które elementy systemu muszą być ładowane na okrągło, a które można dodawać tylko wtedy, kiedy są potrzebne.

Pomysł ten pozostaje na razie w sferze luźnych marzeń, a właściwie wymyśliłem go zaledwie godzinę temu. Jego praktyczna realizacja z pewnością dostarczyłaby ciekawych doświadczeń, ale zastanawiam się, czy naprawdę jest potrzebna. Równie istotne pytanie nurtuje mnie odnośnie wirtualnego systemu plików, o którym pisałem na wakacje (tam też odsyłam zainteresowanych :)) - ten jednak znajduje się już w trakcie pisania i być może niedługo już pojawią się jakieś konkretne dane.

Powrót

Komentarze

Napisał Bartosz Olchówka w piątek, 20 października 2006 o 18:28

Pomysł brzmi chyba zbyt utopijnie. Nie wyobrażam sobie pracy nad takim jądrem skompilowanym z różnych pilków, gdyż każda poprawka w jakimkolwiek z nich wymusiłaby ponowną kompilację, co zapewnie doprowadziłoby mnie do szewskiej pasji ;).

Napisał bela w piątek, 20 października 2006 o 18:57

temat preprocessora, o ktorym piszesz, byl poruszany 2 lata temu na forum.php.pl

http://forum.php.pl/index.php?showtopic=15471

sam cos takie zaimplementowalem, dzialal na zasadzie okreslenia katalogow po ktorych ma przejechac, wykonania odpowiednich filtrow i zapisaniu ponownie

gdzies w tym temacie powininen byc link

Napisał Ace w piątek, 20 października 2006 o 22:44

Hm ja kiedys myslalem o czyms takim ze, kazdy request moze prowadzic do uruchomienia pewnych modulow/bibliotek, wiec mozemy wygenerowac dla kazdego typu requesta odpowiedni plik konfiguracyjny ktory includuje pewne pliki php.

Ale skad taki system ma wiedziec co uruchomic?
1) recznie trzeba stworzyc takie definicjie - nuda
2) autoload - poprzez wpisanie mozliwie kazdego requesta, przez co autoload moze logowac jakie klasy byly szukane i gdzie zostaly znalezione + zapis do pliku konfiguracyjnego danego requesta.

Napisał Bastion w piątek, 20 października 2006 o 23:08

Z tego co się orientuję ( a być może się i mylę ) Serafin coś takiego stworzył. Zwie się to Tau. Wyglądało to tak, że za pomocą skryptu basha generował aplikację PHP w zależności od postawionego zadania. Efekt jest chyba taki sam.

Napisał Tuner w sobotę, 21 października 2006 o 11:31

Też nad czymś takim myślałem, ale na dzień dzisiejszy porzuciłem wdrożenie pomysłu.

Napisał Adam w sobotę, 21 października 2006 o 14:22

Zobacz na artykuł dnia na: eioba.com . Gratuluje.

Napisał Zyx w sobotę, 21 października 2006 o 15:24

Bartek -> kompilacja zachodziłaby po skończeniu projektu. Idea przewiduje stworzenie także automatycznej ładowarki "na bieżąco", którą można wykorzystać w trakcie tworzenia - wtedy poszczególne elementy rzeczywiście byłyby normalnie include'owane, a składane w całość dopiero po skończeniu prac.

Napisał Paweł Halicki w sobotę, 21 października 2006 o 21:30

Ostatniego czasu zacząłem pisać czwartą wersje mojego WindForce i mniej więcej coś takiego postanowiłem zrobić. Jeszcze całość wymaga doszlifowania ale większość kodu jest generowana przez zaznaczanie odpowiednich checkbox'ów. Ja mam sporo mniej do napisania, kod się sam generuje i posiada tylko to, co jest potrzebne, a co za tym idzie zyskuje się na wydajności.

Co do naprawdę udanej implementacji, to myślę że w pojedynkę nie ma co się z tym mierzyć. Trzeba by zebrać jakąś ekipę i poświęcić naprawdę dużo czasu żeby to miało ręce i nogi.

Napisał Tuner w niedzielę, 22 października 2006 o 11:14

Chętnie zainteresuję się takim rozwiązaniem jeśliby powstało. More experience, more joy.

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2009 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia