marcioGuest napisał(a)
Mam nadzieje ze bedziemy kontynuowac dyskusje gdzie bedzie wymiana pogladow a nie wojne lub flame
Co to to nie :D. Ja od flejmów staram się stronić, mam raczej pragmatyczne podejście i nie wiążę się emocjonalnie z żadnym konkretnym rozwiązaniem czy wyjściem. I -- czasami odnoszę wrażenie, że to rzadka przypadłość -- rzadko mówię "A albo B". Czasem nie trzeba się zawsze decydować na A albo na B. Można użyć obu tych rzeczy, albo używać ich w zależności od potrzeb i sytuacji.
margioGuest napisał(a)
1)Cache'owa tylko dane pobrane poprzez model i wsadzac je do pliku jako zeserializowana tablice
No widzisz, o tym np. nie pomyślałem. A jest to istotne, bo tego typu cache potrafi znacznie zmniejszyć liczbę zapytań do bazy danych, które generalnie są czasochłonne.
marioGuest napisał(a)
2)Cache'owac caly komponent czyli statyczne jak i dynamiczne tresci.
Co przez to rozumie.Zamiast cache'owac tylko dane z modelu to cache'owac caly szablon komponentu z godowym kodem html i danymi do niego juz wstawionymi.
Dokładnie to miałem na myśli mówiąc o cache'owaniu statycznym (HTMLowym). Choć może nie użyłem właściwej, fachowej nazwy. Można tak cache'ować kod HTML całych stron, ale również poszczególnych komponentów -- tak, jak wspomniałeś.
marcioGuest napisał(a)
Chyba jest pozno i nie potrafie zrozumiec jednej rzeczy.
Jesli cos jest statyczne czyli masz np taki kod html(twoj statyczny widok) do ktorego wrzucach dane jest nastepujacy (...)
Wytłumaczę na konkretnym przykładzie. Dwa rozwiązania:
- Szablon kompilowany.
- Szablon interpretowany.
Studium przypadku: forum internetowe.
Zauważ proszę, że w żadnym z tych przypadków NIE chodzi o to, że developer zmienił treść szablonu (czyli np. dodał klasę do diva). Rozpatruję tu sytuację, gdy developer siedzi sobie na kanapie i ogląda Star Treka, a napisane przez niego forum chodzi sobie samo i po prostu reaguje na akcje użytkowników.
Najpierw to, jak wygląda szablon kompilowany (sorki za składnię w stylu Smarty). Powiedzmy że jest to panel z prywatnymi wiadomościami:
{if $pm_count eq 0}
<p>Nie masz żadnych prywatnych wiadomości</p>
{else}
<p>Liczba prywatnych wiadomości: {$pm_count}</p>
{/if}
I to się teraz kompiluje do mniej więcej czegoś takiego:
<?php if ($this->pm_count === 0) { ?>
<p>Nie masz żadnych prywatnych wiadomości</p>
<?php } else { ?>
<p>Liczba prywatnych wiadomości: {$pm_count}</p>
<?php } ?>
W przypadku szablonu interpretowanego tego drugiego kodu nie ma (możemy założyć, że składnia samego szablonu pozostaje taka sama). Oczywiście liczba prywatnych wiadomości może pochodzić z bazy danych (lub tablicowego cache'u, o którym wspomniałeś).
Akcja: Ponowne wyświetlenie topicu, w którym nikt nie dopisał posta. Można więc użyć cache'a statycznego (HTML).
- Szablon kompilowany: na stronie nic się nie zmieniło. Można użyć zcache'owanego kodu HTML reprezentującego całą stronę. Do szablonu nawet nie trzeba zaglądać.
- Szablon interpretowany: tak samo jak powyżej.
Akcja: Pierwsze wyświetlenie topicu, w którym ktoś właśnie dopisał posta. Nie można użyć cache'a statycznego (HTML), bo kod HTML strony (lub raczej: komponentu wyświetlającego posty) się zmienił i trzeba wygenerować go od nowa. Co robią oba typy szablonów, by ponownie wygenerować kod HTML?
- Szablon kompilowany: odpala kod PHP będący skompilowaną wersją szablonu. Może to zrobić, bo sam kod szablonu się nie zmienił. Posty wyświetlane są nadal tak samo, tyle że teraz po prostu doszedł nowy post i jakiś tam foreach musi się wykonać raz więcej, by wygenerować HTML dla nowego posta.
- Szablon interpretowany: interpretuje bezpośrednio kod szablonu.
W obu przypadkach wynikowy HTML może trafić do statycznego cache'a -- przyda się to później.
Różnica polega na tym, że w przypadku szablonów kompilowanych odpalany jest zwykły skrypt PHP z natywnymi dla PHP pętlami foreach itd. W przypadku szablonu interpretowanego, interpreter przetwarza zaś szablon za pomocą wyrażeń regularnych i innych skomplikowanych i potencjalnie czasochłonnych konstrukcji.
Kompilowanie to jak dla mnie po prostu jeszcze jeden swoisty sposób cache'owania. Jakby: cachuje się wynik pracy interpretera ;). Bo interpreter nie pracuje interaktywnie. To, co my nazywamy interpreterem jest poniekąd i tak kompilatorem, bo kompiluje kod szablonu do kodu HTML. To, co nazywamy tu kompilatorem szablonów zaś kompiluje kod szablonu do kodu PHP, a ten dopiero generuje HTML. Wydaje się, że to dodatkowa pośredniość i złożoność, ale tak naprawdę kompilacja szablon->PHP (czyli jakby interpretacja szablonu) następuje tylko wtedy, gdy developer zmieni szablon, czyli bardzo rzadko. W przypadku interpretera zaś interpretacja szablonu następuje zawsze gdy dany komponent będzie miał wygenerować inny kod HTML, czyli gdy np. w komponencie z newsami dojdzie kolejny news.
edit: Co do tego kto jest autorem kodu nie będę się wypowiadał, bo nie chcę się w to zagłębiać, ale jeśli ktoś podpisał się pod czyimś kodem (który ew. nieco zmienił), to BARDZO nieładnie. Chyba że oryginalny autor kodu na takie zachowanie pozwala.