Magento zostało zaprojektowane w taki sposób aby każdy z łatwością mógł otworzyć własny sklep internetowy i dostosować go do swoich potrzeb bez potrzeby znajomości PHP lub innego języka programowania. I faktycznie twórcom Magento z firmy Varien (od 2011 roku eBay) udało się stworzyć niesamowicie elastyczny i konfigurowalny system.

Elastyczność Magento jest niestety powodem jego powolnego działania (EAV, modularyzacja a co za tym idzie mocno rozbudowany kod). Istnieje kilka podstawowych trików dzięki którym nasza instalacja Magento ożyje co pozwoli zwiększyć konwersje. W poniższym artykule chciałbym przedstawić najprostsze do wdrożenia metody pozwalające przyspieszyć Magento.

Płaski katalog

Magento używa modelu EAV (więcej informacji o EAV tutaj) do przechowywania danych dla produktów, kategorii oraz użytkowników. Zaletą EAV jest elastyczność, możemy w dowolnym momencie dodawać atrybuty dla wyżej wymienionych rodzajów encji. Konsekwencją stosowania tego typu modelu danych jest fakt iż aby pobrać dane dotyczące np. produktu musimy skorzystać z co najmniej 6 tabel, co w efekcie powoduje wykonywanie ciężkich zapytań mocno obciążających bazę danych.

Głównym obszarem dotkniętym takim obciążeniem jest katalog a więc encje produktów oraz kategorii. Aby zapobiec tego typu zapytaniom twórcy Magento zaimplementowali możliwość tworzenia płaskich struktur danych dla kategorii oraz produktów za pomocą indekserów. W skrócie można napisać, że płaski katalog tworzy pojedyncze tabele dla produktów oraz kategorii w których są zgromadzone wszystkie wartości atrybutów przypisanych dla danej typu encji. Dzięki temu Magento wykonuje tylko proste zapytania podczas przeglądania katalogu, co skutkuje większą prędkością działania aplikacji oraz mniejszym obciążeniem serwera.

Aby włączyć obsługę płaskiego katalogu należy w panelu admina Magento wejść w System → Konfiguracja (ang. Configuration) następnie odszukać zakładkę Katalog i w sekcji Interfejs klienta(Frontend) należy ustawić opcje Użyj płaskiego katalogu kategorii (Use Flat Catalog Category) oraz Użyj płaskiego katalogu produktów (Use Flat Catalog Product) na Tak.

Niestety płaski katalog posiada pewne ograniczenia, dotyczą one maksymalnej dopuszczalnej wielkości dla pojedynczego wiersza w tabeli MySQL, wartość ta wynosi 65535 bajtów. Mogą więc się zdarzyć sytuacje w których skorzystanie z płaskiego katalogu będzie niemożliwe (zbyt duża ilość atrybutów zapisanych w tabeli płaskiego katalogu).

tab1

 

 

tab2

 

Podczas wykonywania testów cache został wyłączony aby nie nie zakłócać wyników testu. W przypadku widoku kategorii po włączeniu płaskiego katalogu nastąpiło 12% zmniejszenie czasu odpowiedzi. W przypadku widoku produktu gdzie w przypadku jednego zapytania następuje o wiele mniej zapytań do bazy danych czas odpowiedzi zmalał o 8%.

Cache

W podstawowej instalacji Magento system cache opiera się na plikach umieszczonych w folderze var/cache, nie jest to optymalne rozwiązanie ze względu na prędkość lecz wymaga ono minimalnej konfiguracji i jest rozwiązaniem wystarczającym aby nasza instalacja zaczeła być przyjemna w użytkowaniu. Aby aktywować cache należy wybrać System → Zarządzanie cache (ang. Cache managment) a następnie zaznaczyć każdy rodzaj cache, wybrać Akcja: Włączony (ang. Action: Enable) oraz Wyślij (ang. Submit). Częstym zaniechaniem po uruchomieniu środowiska produkcyjnego jest pozostawienie wyłączonego cache w Magento, o tym jak wielki jest to błąd świadczą poniższe wyniki testu.

tab3

 

 

tab 4

Przed dokonywaniem pomiarów cache został rozgrzany poprzez kilkukrotne wejście na testowaną stronę. Wyniki są dość przewidywalne, dzięki włączonemu systemowi cache Magento przyspieszyło, i to znacznie. Największą różnicę można odczuć podczas przeglądania kategorii, widok strony CMS oraz produktu również znacznie przyspieszył co zwiększy komfort używania sklepu. Oprócz oczywistej korzyści w prędkości ładowania stron używanie cache pozwoli odciążyć sprzęt dzięki czemu będzie mógł on się zająć ważniejszymi z naszego punktu widzenia operacjami jak na przykład dokonywanie zamówień.

Scalanie JS/CSS

Kolejną wbudowaną funkcjonalnością Magento jest scalanie plików javascript oraz css. Po włączeniu scalania Magento generuje odpowiedni plik zapisując do niego zawartość wszystkich ładowanych na stronie plików css/js, dzięki takiej operacji Magento zmniejsza ilość żądań co w efekcie przyspieszy naszą stronę. Aby włączyć scalanie należy wejść do System → Konfiguracja (ang. Configuration), następnie wejść w zakładkę Programista (ang. Developer) oraz włączyć odpowiednie opcje w sekcjach Ustawienia CSS (ang. CSS Settings) oraz Ustawienia JavaScript (ang. JavaScript Settings).

tab 5

Scalanie również korzystnie wpływa na zmniejszenie rozmiaru ładowanej strony.

tab 6

tab7

Po włączeniu scalania plików JavaScript oraz CSS liczba żądań spada z 51 do 25, oczywiście ta liczba zależy od skórki oraz dodatków zastosowanych w naszej instalacji. Nieznacznie również zmniejsza się rozmiar ładowanej strony, istnieje łatwy sposób pozwalający na skompresowanie plików CSS oraz JavaScript opiszę go w kolejnym punkcie.

Fooman SpeedsterAdvanced

Jedno z najpopularniejszych rozszerzeń do Magento umożliwia skompresowanie plików css oraz js. Na testowej instalacji Magento rozszerzenie to pozwoliło mi na zmniejszenie rozmiaru ładowanej strony o prawie 100KB. Instalacja jest bardzo prosta, rozszerzenie można znaleźć tutaj

Najnowsza wersja Magento

Magento cały czas ewoluuje, z wersji na wersję jest coraz bardziej doskonałe. Programiści pracujący nad nim prócz poprawek błędów i wdrażania nowych funkcjonalności pracują nad przyspieszeniem całego systemu. Efekty są naprawdę zaskakujące, poniższe testy zostały wykonane na dwóch wersjach Magento (1.5.1.0 oraz 1.9.1.0), na tym samym środowisku testowym z takimi samymi wersjami pakietów oraz ustawieniami Magento:

  • włączony cache,
  • włączony płaski katalog,
  • włączone scalanie CSS oraz JS.

tAB8

Tb9

Jak widać warto (o ile jest to możliwe) regularnie pilnować aktualizacji systemu do najnowszej wersji, przyniesie to na pewno wymierne korzyści.

Podsumowanie

Dzięki wyżej przedstawionym prostym do wdrożenia i zastosowania metodom, można znacznie przyspieszyć sklep internetowy stworzony na Magento. Powyższe modyfikacje można wdrożyć bez względu na to czy mamy hosting czy też dedykowany serwer. W kolejnym artykule przedstawię kolejne sposobu pozwalające poprawić wydajność naszej instalacji Magento, tym razem będą to bardziej zaaawansowane metody skupiające się na odpowiedniej konfiguracji naszego serwera.

 

Chcesz ulepszyć swój e-business razem z Divante? Napisz do nas.