Temat: Jak przyspieszyc CakePHP?
Jakub Wietrzyk:
Jeszcze sie do 1.2 nie przekonalem, nie potrafie powiedziec czy stoja za tym jakies rzeczowe argumenty :)
1.2 powinien się nazywać 1.5 przynajmniej, jak dla mnie doszło tyle nowych rzeczy, że 1.1 nie byłem w stanie już używać :) Behaviors, CacheEngines,nawet EmailComponent (chociaż używam ze zmodyfikowanej wersji która ma SwiftMailer pod maską), Testy!,Reverse Routes, AuthComponent, i18n, nowy FormHelper, walidacja, Set, Debugger, Socket... uff móglbym tak bez końca ;)
Dużo z tych rzeczy było dostępnych przez rozmaite hacki itp ale dobrze mieć to wszytko w core.
ale przyznaje BindableBehavior robi wrazenie, expects dla 1.1 z grubsza dziala tak samo jak moje rozwiazanie (ktorego BTW uzywam od roku conajmniej) - widze ze trzeba do bakery zagladac czesciej...
Tak expects działa podobnie + kilka małych udogodnień.
Zza kulis to niedługo(jak to w świecie Cake jest to określenie relatywne;) będzie Bakery 2.0.
trzeba patrzeć czy dostajesz tylko te dane których potrzebujesz (pola,zapytania itd - j.w.)
używam Memcache (CacheeEgines)
Jak uzywasz memcache i do czego?
Zależnie od ilości pamięci dostępnej i użycia zapytań ale uprawnienia są wysoko na liście. Przed cachowaniem zwykle robię testy co najdłużej zajmuje i co moge wrzucić do plików, a co bardziej opłaca sie do memcache.
Ja w memcache trzymam wyniki zapytan o uprawnienia (bo te rzadko sie zmieniaja a bywaja skomplikowane), wyniki innych, duzych, czesto i powtarzajacych sie zapytan, statusy online uzytkownikow (fajnie mozna wykorzystac expire time, bez dodatkowych zapytan do bazy czy grzebania po sesjach)
Alternatywa dla powyzszego to cache plikowe, ale to tylko do calych elementow strony typu chmury tagow itp, ktore zmianiaja sie duzo rzadziej. Szkoda cakowe calych widokow tak rzadko sie przydaje...
Tak ,ale własnie już elementy można śmiało cachować (oczywiście też z rozwagą).
Uzycie memcache w modelu ogranicza sie wiec do napisania przed zapytaniem
Jako, że 1.2 ma CacheEngines[1] (jednym z nich jest własnie memcache) to używanie memcache jest jeszcze prostsze - polecam popatrzeć na testy po przykłady użycia.
Uwazam ze requestAction jest "evil", Cake traci mase czasu na tworzenie klas modeli, kontrolera, komponentow, helperow (polecam odpalenie jakiegos profilera albo chociaz PEAR::Benchbark), a requestAction odpala ci w jednym requescie "dwa" cake'i, albo wiecej jak wiecej masz takich elementow..
Tak zdecydowanie jest 'evil' i często można go uniknąc na etapie projektowania, jednak czasem jest potrzebny. Chyba nie mogę ujawnić aktualnych przykładów ale np. chmura tagów jest dobrym 'elementem' gdzie można użyć requestAction i cachować ja na dzień dwa lub więcej zależnie od potrzeb. Można nawet cache odświeżac z crona(ok to troche na wyrost do tego przykładu ale chodzi mi o samą możliwośc)(co do crona - nowe Console w 1.2 to miód :)
niektóre modele (szczególnie te proste - typu 'enum')-
sorki skrót myślowy - wiadomo, że enum jest 'evil' brak możliwości łatwego dodania nowych opcji itp więc wyjścia są 2: a) wrzucić opcje do php jako array - nie idealne ale czasem wystarczające albo wrzucić do opcje do bazy zrobić model i powiązać. te modele zmieniaja się _bardzo_ rzadko ale jednak zmieniają.
Oczywiście optymalizujemy *PO* zbudowaniu aplikacji :)
Tu sie zupelnie nie zgadzam (chyba ze to byl zart):
Nie był :)
Z mojego doswiadczenia: w duzej aplikacji, jesli zespol nie ma dobrych nawykow od samego poczatku to pozniej jest koszmar...
Zdecydowanie tak, ale właśnie te dobre nawyki nie mogą być zbyt 'dobre' ;)
Widziałem tyle przypadków gdzie ludzie chcieli oszczędzic jedno proste zapytanie do bazy i wymyślali takie rzeczy, że nigdy bym takiego kodu nie pokazał nikomu ;) (tak na #cakephp zdarzają sie takie chwile) Oczywiście to są skrajności. Podsumowując - jestem za optymalizacją ale nie można przesadzać (a łatwo wpaść w "szał" premature optimization - wiem z własnej ręki).
Cytując wikipedie [2]
Donald Knuth said, paraphrasing Hoare,
* "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil."
Charles Cook commented,
* "I agree with this. It's usually not worth spending a lot of time micro-optimizing code before it's obvious where the performance bottlenecks are. But, conversely, when designing software at a system level, performance issues should always be considered from the beginning. A good software developer will do this automatically, having developed a feel for where performance issues will cause problems. An inexperienced developer will not bother, misguidedly believing that a bit of fine tuning at a later stage will fix any problems."
Wszystko sprowadza się do doświadczenia.
Na CakeFest była przentacja ludzi z mozilli (dużo ciekawego na ich blogu AMO odnośnie wydajności cake - naprawde wyciskają z niego siódme poty) podobno ciekawa i dotyczyła w dużej mierze cachowania. Ma być wypuszczone dvd (a raczej miało jak byłem na fosdem gwoo zaklinał się, że jak najszybciej - przy okazji jest video i pdf z fosdem - tam też jest dużo informacji o 1.2)
BTW: Widze ze z CakePHP w Polsce nie jest tak zle, jest kilku ludzi co ma cos ciekawego do powiedzenia. Dzieki za posty i pozdrawiam.
Jest troche ludzi w Polsce, często przewijają sie polacy przez #cakephp/#cakephp.pl
[1]
http://api.cakephp.org/1.2/class_cache_engine.html#d7e...
http://book.cakephp.org/view/213/cache
[2]
http://en.wikipedia.org/wiki/Optimization_(computer_sc...