Bardzo często poruszany temat – wydajność. Bogactwo opcji rzadko idzie w parze z wydajnością, dlatego po zbudowaniu swojej strony trzeba zoptymalizować ją. Wyobrażasz sobie Joomla na serwerze wirtualnym z prawie 30 tysiącami unikalnych użytkowników i 150 tyś. odsłon w ciągu doby? Powtarzam: na serwerze wirtualnym. Nie? Ja też... nie wyobrażałem sobie tego, ale to fakt. Zobaczyłem statystyki jednego z serwisów opartego na Joomla i te liczby zaintrygowały mnie do tego stopnia, że skontaktowałem się z administratorem tamtego serwisu. W odpowiedzi otrzymałem bardziej szczegółowe statystyki i kilka wskazówek, jak zoptymalizować Joomla pod kątem wydajności.
Prawdę mówiąc pewnie sam bym na to wpadł, ale skoro dostałem przepis na optymalizację Joomla, to podzielę się nim z Wami. Oczywiście o 30 tyś. uyżytkowników zapomnijcie, bo (pomijając nakłady potrzebne, by wypromować stronę) nie opiszę tu wszystkiego, co można zrobić, a jedynie najbardziej przystępne i sprawdzone przeze mnie zabiegi :)
Joomla, to niesamowicie elastyczny CMS – nadaje się do wszystkiego. Tuż po instalacji dysponujemy potężnym narzędziem do stworzenia własnej strony. Nie spieszmy się. Powolutku i z rozmysłem stwórzmy naszą stronę, a kiedy już nabierze ostatecznego kształtu, możemy przejść do optymalizacji skryptu, dzięki czemu zmniejszymy jego "serwerożerność".
Po pierwsze wyłączmy statystyki wewnętrzne serwisu. Gromadzenie statystyk generuje ogromną liczbę zapytań do bazy, a przyznać trzeba, że statystyki wewnętrzne w Joomla do dokładnych nie należą, szkodą więc marnować moc serwera. Wyłączyć trzeba zarówno gromadzenie wszystkich rodzajów statystyk: danych o systemach i przeglądarkach, krajach, o ilości odsłon, a także wpisywanych w systemową wyszukiwarkę fraz.
O ile o wyłączaniu statystyk mówi się często, o tyle mało kto dalej wzrokiem sięga, a przecież sposobów na oszczędzenie baz danych jest więcej :) Przy każdym przeładowaniu strony skrypt musi z bazy wyciągnąć informacje dotyczące nie tylko części prezentacyjnej (artykuły, komponenty) ale także i chyba przede wszystkim modułów. Można tego uniknąć, a potrzebna nam będzie do tego elementarna znajomość html i budowy szablonów Joomla.
Cała filozofia sprowadza się do umieszczenia na stałe w pliku index.php templatki kodu html naszych modułów. W tym celu musimy odnaleźć w pliku index.php pozycję modułów, które chcemy statycznie umieścić. Za przykład weźmy pozycję "left" w templatce rhuk_solarflare_ii:
Pozycja "left" jest zaznaczona, w tym miejscu wyświetlana jest lista modułów mających w ustawieniach "left". Zaglądamy do źródła naszej strony – w przeglądarce Ctrl+U i odszukujemy zawartość div'ów pozycji "left":
Kopiujemy ze źródła kod html i wklejamy go w odpowiednim miejscu w index.php – tutaj właśnie jest nam potrzebna podstawowa znajomość html i budowy szablonów dla Joomla/Mambo, byśmy wiedzieli co dokładnie skopiować i gdzie dokładnie to wkleić, aby szablon strony nam sie nie "wysypał".
W ten sposób możemy na stałe umieścić moduły, które nie zmieniają się, a więc menu, linki/buttony itp. Takie rzeczy jak ostatnie komentarze, nowości itp. musza zostać. W moim przypadku wygląda to tak: w index.php mojego szablonu nad mosLoadModules umieściłem Menu, Kategorie i Snikers'a, następnie wyświetlane są najnowsze komentarze, a pod nimi reszta statycznie umieszczony moduł "Polecam". Dzięki temu kolejność modułów mam taką, jaką chciałem. Podobnie jest z reklamą AdSense nad topem strony i modułem znajdującym się pod artykułami.
Po tych zabiegach strona stała się bardzo przyjemna dla serwera, co potwierdził administrator – różnica w obciążeniu serwera jest bardzo duża i oczywiście na plus. Z resztą widać to nawet podczas otwierania strony, szczególnie na szybkich łączach: pobierane z "mielonej" bazy danych moduły lubiły spowalniać pobieranie strony, a statyczne moduły to po prostu kod html, z którym radzić sobie musi przeglądarka, a nie serwer.
Kolejny element poprawy wydajności dopiero rozpracowuję, bo nie mam co do niego dokładnych wytycznych, głowy nikomu nie będę zawracał, tylko sam do tego dojdę i opiszę :) Pierwsze próby już poczyniłem i wkrótce poproszę kogoś z obsługi technicznej o raport na temat obciążenia serwera. Jednak już dwa wyżej wymienione sposoby pozwalają na znaczne zminimalizowanie obciążenia serwera.
Spodziewam się głosów, że dobry CMS nie powinien wymagać optymalizacji. Być może. Jednak Joomla to tak specyficzna aplikacja, którą można w 100% dostosować do własnych potrzeb, a to wiąże się z wyrzeczeniami – nic za darmo. Jeśli jednak nasza strona nabierze ostatecznego kształtu, to bez obaw można zabrać się za poprawę wydajności stosując powyższe sposoby. Minusem niestety jest brak submenu i oznaczania aktywnej pozycji menu (obecnie oglądanej postrony serwisu). Zauważyć jednak trzeba, że najpopularniejsze serwisy unikają takich gadżetów, które, nie ma co ukrywać, wiążą się z dodatkowym maglem dla bazy danych, co najboleśniej odczuwane jest na serwerach wirtualnych.
Pozdrawiam Ps. Szuman będiesz pisał ten poradnik o templatce?
Również pozdrawiam
Statystyki najlepiej zainstalować osobno, są dokładniejsze i nie obciążają aż tak serwera. Ostrzeżenie, znalazłem komponent astats, do joomli, zainstalowałem i po 2 tygodniach wywalałem go szybciutko, bo się okazało, że baza rozrosła się do 25 MB, natomiast w tym samym czasie Alien stats zebrał tylko kilkadziesiąt kilo.
Joomla potrafi być wydajnym CMSem pod względem ilości zapytań do bazy mysql. Administratorom serwisów cieszących się dużą liczbą odwiedzin nie trzeba będzie zachęcać do kupna komponentu ze strony http://www.joomlatwork.com/products/components/joomla_performance.html o nazwie Joomla performance booster!. Co on powoduje? Jest to system zaawansowanego cachowania (kompletnie inny niz ten wbudowany obecnie w joomli). "Dzieki temu komponentowi strona w joomli działa niemal jak statyczna strona html. Jeżeli dana strona jest w cache żadne zapytania SQL nie są wykonywane i nie jest ustanawiane połączenie SQL (oprócz sprawdzenia czy dana strona nie wygasła). To znaczy, że Twoja strona będzie nadal działać, jeżeli baza mysql ulegnie awarii, do czasu aż wygaśnie ona w cache". To jest moje luźne tłumaczenie opisu ze strony produktu. Sam zastosowałem ten komponent na swojej stronie (ok. 10tys. uników dziennie) i sprawuje się tak świetnie, że Admin serwera na razie zrezygnował z "eksmitowania" mojej strony :) Wady komponentu Joomla performance booster!?. Plik index.php jest modyfikowany, cachowanie działa dla niezalogowanych osób (dla zalogowanych automatycznie się wyłącza), wszystkie dynamiczne rzeczy na stronie odświeżają się wtedy, gdy generowana jest nowa strona w cache (zależnie od czasu jaki ustawiło się na cechowanie w opcjach komponentu) Polecam ten komponent - wydatek w stosunku do korzyści jest niewielki!
Nie jestem w żaden sposób związany z twórcami tego płatnego komponentu ani tez nie czerpię z tego żadnej korzyści. Pomyślałem sobie, że będzie on zbawieniem dla „poważniejszych” stron opartych na Joomla!
Pozdrawiam Adminów Joomli!
Maciek F. :-)
:P
Więcej o tym tutaj
http://help.mamboserver.com/index.php?option=com_content&task=view&id=33&Itemid=60
Za pomocą odpowiednich warunków php można zoptymalizować szablon do minimum, gdyż po co ma się ładować całość jak my potrzebujemy tylko ten dany kawałek np na stronie głównej.
Oczywiście jest jeszcze wiele sposobów optymalizacji ale to badziej wtajemniczeni wiedzą o co chodzi.
Obecnie sam staram się postawić "portalik"
U mnie na 1.4.3 z polską adaptacją jest wszystko OK
Link do testu: http://www.cms.rk.edu.pl/w/p/benchmark-cmsw-i-pod-obcieniem/
PS. Fajny artykulik o poprawie wydajnosci Joomla :-)
Chciałbym się dowiedzieć ile by kosztowało u was zoptymalizaowanie strony www.vikon.pl ??? Zwłaszcza chodzi mi o linki strony.
Joomla 1.5.10 + Virtuemart 1.1.3
Proszę o odpowiedź na maila