Dlaczego Magento działa tak wolno? [Zamknięte]

138

Czy Magento jest zwykle tak strasznie wolne?

To jest moje pierwsze doświadczenie z nim, a panel administracyjny po prostu zajmuje wieki, aby załadować i zapisać zmiany. Jest to domyślna instalacja z danymi testowymi.

Serwer, na którym jest hostowany, bardzo szybko obsługuje witryny inne niż Magento. Co takiego jest w kodzie PHP używanym przez Magento, że działa tak wolno i co można zrobić, aby to naprawić?

pan euro
źródło
12
Na jakim sprzęcie go używasz? Magento potrzebuje poważnego wsparcia sprzętowego z mojego doświadczenia.
jitter
3
Nie proszę o wsparcie, ale kod. Miałem nadzieję, że ktoś doświadczył tego w przeszłości i zoptymalizował kod, aby uniknąć tak powolnego zachowania. Nie mam konkretnego fragmentu kodu, na który można by wskazać, ponieważ ma on zastosowanie w całej witrynie. Będę musiał dokładniej przyjrzeć się sprawie.
mr-euro
18
Magento ma ponad 6000 plików klasy i jest zbudowany do użytku korporacyjnego, a nie do użytku domowego. Bez APC nie myśl o instalacji. Nie polecam go do małych sklepów.
Elzo Valugi
1
Jeśli chodzi o twoją flagę, @Jonesome: to pytanie jest bardzo szerokie i ... prawdopodobnie nieco przestarzałe w tym momencie. To powiedziawszy, mamy teraz dedykowaną stronę poświęconą problemom Magento ( Magento ), która prawdopodobnie byłaby dobrym źródłem informacji dla każdego, kto pracuje nad optymalizacją swojej konfiguracji.
Shog9
1
@ Shog9 Zarządzam zespołem, który rozwija i wspiera dodatki do magento. Mogę powiedzieć, że ten konkretny problem pojawia się prawie codziennie. Magento nie jest „normalną” aplikacją z lampą, ponieważ wymaga bardzo (bardzo) zasobów. Ten wątek jest ważny. Zamknięcie go zmusza tę wspólną rozmowę z SO, co jest niefortunne dla wszystkich.
Jonesome Przywraca Monikę

Odpowiedzi:

184

Byłem tylko stycznie zaangażowany w optymalizację Magento pod kątem wydajności, ale oto kilka powodów, dla których system jest tak wolny

  1. Niektóre części Magento wykorzystują system bazy danych EAV zaimplementowany na MySQL. Oznacza to, że zapytanie o jedną „rzecz” często oznacza zapytanie o wiele wierszy

  2. Za kulisami jest wiele rzeczy (konfiguracja aplikacji, konfiguracja systemu, konfiguracja układu itp.), Które obejmują tworzenie gigantycznych drzew XML w pamięci, a następnie „odpytywanie” tych samych drzew o informacje. Zajmuje to zarówno pamięć (przechowywanie drzew), jak i procesor (analizowanie drzew). Niektóre z nich (zwłaszcza drzewo układu) są ogromne. Ponadto, o ile nie jest włączone buforowanie, drzewo to jest tworzone z plików na dysku i przy każdym żądaniu .

  3. Magento używa swojego systemu konfiguracji, aby umożliwić Ci przesłonięcie klas. Jest to potężna funkcja, ale oznacza, że ​​za każdym razem, gdy tworzony jest model, pomocnik lub kontroler, należy uruchomić dodatkowe instrukcje PHP, aby określić, czy potrzebny jest oryginalny plik klas, czy też pliki klas zastępujących. To się sumuje.

  4. Oprócz systemu układu, system szablonów Magento obejmuje dużo renderowania rekurencyjnego. To się sumuje.

Ogólnie rzecz biorąc, zadaniem inżynierów Magento było przede wszystkim zbudowanie możliwie najbardziej elastycznego, dostosowywalnego systemu, a później martwienie się o wydajność.

Pierwszą rzeczą, jaką możesz zrobić, aby zapewnić lepszą wydajność, jest włączenie buforowania (System -> Zarządzanie pamięcią podręczną). Zwolni to część blokowania procesora / dysku, które ma miejsce, gdy Magento tworzy różne drzewa XML.

Drugą rzeczą, którą chcesz zrobić, jest zapewnienie, że Twój host i zespół operacyjny mają doświadczenie w dostrajaniu wydajności Magento. Jeśli polegasz na planie za 7 USD miesięcznie, aby cię przetrwać, cóż, powodzenia.

Alan Storm
źródło
10
Dziękuję za obszerne wyjaśnienie. Magento jest rzeczywiście bardzo potężne, a jednocześnie zapewnia elastyczność. Początkowo myślałem, że to po prostu blokada zapisów bazy danych z powodu źle napisanego SQL, ale teraz zdaję sobie sprawę, że za kulisami dzieje się znacznie więcej, niż początkowo oczekiwano. Uwaga: buforowanie zostało wyłączone z powodu dodawania produktów przez właściciela sklepu. Kiedy pamięć podręczna była włączona, skarżył się, że produkty się nie pojawiają, co zmusza mnie do wyłączenia pamięci podręcznej podczas zakładania sklepu. Jest hostowany na serwerze dedykowanym, ale wygląda na to, że będę musiał przenieść Magento do własnego ekskluzywnego pudełka.
mr-euro
4
Profilowałem to jakiś czas temu z XHProf. Analiza XML zajęła ogromną ilość czasu - myślę, że jesteś na miejscu z tą listą.
Morgan Tocker
1
Zastanawiałem się, czy uruchomienie Magento na HHVM nie polepszy tego. Ostatnio sprawdzałem, czy HHVM nie obsługuje Magento, ale czy to pomogłoby, gdyby zostało zrobione?
Bharadwaj Srigiraju
1
To wiele wyjaśnia. Wiedza to połowa sukcesu. Nie rozumiem, jak nie można tego uznać za konstruktywne.
flcoder
Nie zapomnij o optymalizacji plików autoloadera Composera (zobacz wytyczne dotyczące wydajności Magento), jeśli używasz Composera i - dla Magento2 - włącz tryb produkcyjny! Lakier to również bardzo dobry pomysł, pod warunkiem, że Twoja aplikacja nie ma problemów z całostronicową pamięcią podręczną.
Dmitri Sologoubenko
54

W nawiązaniu do zaleceń Alana Storma dotyczących buforowania, są dwie rzeczy, które szczególnie polecam, abyś zapoznał się z buforowaniem:

- Upewnij się, że buforowanie jest w memcached, a nie na dysku.

Zajmuję się kilkoma instalacjami magento, a kiedy już dostaniesz jakiekolwiek obciążenie systemu, memcached zaczyna działać znacznie szybciej. I jest bardzo łatwy do zmiany (w stosunku do robienia innych rzeczy przynajmniej z Magento!)

Dobry punkt wyjścia jest tutaj: http://www.magentocommerce.com/boards/viewthread/12998/P30/ - ale jeśli w ogóle nie korzystałeś z memcached, warto również zapoznać się z ogólnymi informacjami na jego temat.

- Włącz buforowanie szablonów / widoków.

To jest dobry artykuł: http://inchoo.net/ecommerce/magento/magento-block-caching/

Na stronie magento są też dobre (buforowanie bloków google magento), ale w tej chwili jest wyłączone.

Aby dodać moje dwa centy do buforowania bloków, radziłbym utworzyć własne bloki w / app / code / local, rozszerzając podstawowe i definiując parametry pamięci podręcznej, nazwij je xxx_Cache, a następnie zaktualizuj układ, aby zamiast tego używał tych bloków tych podstawowych. W ten sposób unikniesz utraty zmian lub zepsucia systemu podczas aktualizacji magento.

benlumley
źródło
3
Dzięki za punkty. Rzucę okiem na memcached, którego wcześniej nie używałem w produkcji. Dobry pomysł na klonowanie bloków.
mr-euro
3
Po drugie, co powiedział Benlumbey, nie używam memcached, ponieważ używam serwera Windows, ale przechowuję katalog / var na dysku SSD i to zrobiło dla mnie dużą różnicę.
Rick J
@rickj - tak, wszystko, co można zrobić szybciej folder ./var, zdecydowanie pomaga, próbowałem również użyć tmpfs przed memcached, a także dostałem przyzwoity wzrost.
benlumley
Dodałbym, aby użyć pamięci podręcznej apc tylko dla pojedynczego węzła, ponieważ wydaje się, że ma mniej narzutów niż memcached dla środowiska z wieloma węzłami.
sbditto85,
2
Tak, prawda. Ale są tam pewne zastrzeżenia, w zależności od tego, jak uruchomisz PHP, możesz otrzymać oddzielną pamięć podręczną APC dla każdego procesu PHP - co staje się jeszcze mniej optymalne, jeśli cyklujesz procesy PHP co każde żądanie X.
benlumley
23

Jeśli jeszcze tego nie widzieliście, Magento i Rackspace połączyli siły, aby stworzyć białą księgę na temat dostrajania wydajności Magento. To jest świetne. https://support.rackspace.com/whitepapers/building-secure-scalable-and-highly-available-magento-stores-powered-by-rackspace-solutions/

--- edytować ---

Kolejnym świetnym źródłem, nowo dostępnym (październik 2011), jest: http://www.sessiondigital.com/assets/Uploads/Mag-Perf-WP-final.pdf

(Dzięki Alan Storm za ten jeden.)

Laizer
źródło
Dzięki za aktualizację, później ją dokładniej przeczytam.
mr-euro
2
To drugie łącze jest teraz martwe.
Laizer
1
Pierwszy link też jest martwy.
Edward
Linki są zepsute. Ner
Ner
1
Bezpośredni link do białej księgi Rackspace (link nr 1).
Levi Figueira
17

Prawdopodobnie istnieje również bardzo nieoczywisty powód, dla którego interfejs administratora jest bardzo powolny. Magento ma moduł o nazwie Mage_AdminNotification. Spróbuj wyłączyć to rozszerzenie. Ponieważ to, co robi, to zapytanie magentocommerce.com o nowe wiadomości o aktualizacjach. Jeśli ich serwery działają wolno, strona administratora czeka i w efekcie działa wolno z powodu opóźnienia sieci i ładowania zewnętrznych wiadomości. Jeśli zabezpieczyłeś wychodzące połączenie z serwerem przez zaporę ogniową, może to być jeszcze bardziej frustrujące, ponieważ interfejs administratora będzie czekał na przekroczenie limitu czasu, gdy nie może dotrzeć do magentocommerce.com

Aby go wyłączyć: przejdź do System -> Konfiguracja, przewiń w dół i naciśnij Zaawansowane (w sekcji Zaawansowane). Teraz wyłącz Mage_AdminNotificationi zapisz!

Sam Figueroa
źródło
4
To znacznie różniło się wydajnością w moim lokalnym środowisku deweloperskim, co zawsze frustrowało mnie, jak wolno to działało na bardzo szybkim komputerze deweloperskim. Dziękuję Ci!
random_user_name
W Magento2: Sklepy-> Konfiguracja-> Zaawansowane-> Zaawansowane, a następnie wyłącz Mage_AdminNotification.
Scott C Wilson
6

Mam tylko powierzchowne doświadczenie z Magento. Zainstalowałem go na współdzielonym serwerze gridowym i ładowanie strony było fatalne ~ 5 + sekund. Na próżno zainstalowałem go na moim serwerze dedykowanym zoptymalizowanym pod kątem witryn CMS i było to bardzo, bardzo zgryźliwe.

Mój hosting dedykowany miał ~ 10 Joomla! witryny i działającą witrynę VBullitin.

Domyślam się, że po prostu nie będzie działać na współdzielonym hostingu. Nadmierna subskrypcja po prostu nie zapewni wystarczającej ilości zasobów, aby Magento działało tak, jak powinno.

creuzerm
źródło
6

Jestem bardziej zaangażowany w optymalizację serwerów zarządzanych w mojej firmie, ale mogę mieć dla Ciebie kilka wskazówek. Po pierwsze, możesz przyjrzeć się kodowi dokładniej, korzystając z funkcji śledzenia kodu serwera Zend. Pozwoli Ci zobaczyć, gdzie i kiedy rzeczy się brudzą.

Całkowicie podzielam opinię Benlumleya dotyczącą pamięci podręcznej. Większość witryn, które hostujemy, nie ma nawet włączonego buforowania bloków. Ta pamięć podręczna musi być jawnie wywoływana, a nie „zakładana”. Więc jeśli twój kod nie brał jeszcze udziału w tym mechanizmie, zdecydowanie chcesz spróbować. Jeśli masz wersję EE, możesz wyświetlić pełną stronę, aby uzyskać najlepsze z bestii.

Odwrotny serwer proxy również bardzo pomoże. Będzie buforować statyczne zasoby, znacznie zmniejszając nacisk na stos interpretacji php na serwerach frontowych.

Nie zapomnij zapisać sesji i pamięci podręcznej Magento na dysku RAM. To z pewnością przeniesie Cię na inny poziom występów.

Wciąż jest wiele do powiedzenia, ale kończy mi się czas. Musisz wiedzieć, że dobra witryna, dobrze zakodowana w wersji 1.4.1 CE, działająca na serwerze 2x5650 Xeon + 16 GB RAM i posiadająca Rproxy na wierzchu, może przyjmować do 50000 unikalnych odwiedzających dziennie z płynnymi stronami dla wszystkich .

kameo
źródło
5

Przejście z Apache na LiteSpeed ​​bardzo nam pomogło. Oprócz: Edytowania ustawień MySQL, instalacji Fooman Speedster (moduł do kompresji / łączenia plików js i css) oraz instalacji APC. Magento opublikowało również białą księgę na temat tego, jak uzyskać najlepszą wydajność z edycji Enterprise, ale ma to również zastosowanie do innych wersji: http://www.magentocommerce.com/whitepaper/

Jonathan
źródło
4

Istnieje wiele powodów, dla których Twój koszyk na zakupy Magento może działać wolno, ale nie ma wymówek, ponieważ istnieje wiele sposobów, aby rozwiązać problem i sprawić, by był bardzo szybki. Włączenie Gzip poprzez modyfikację pliku htaccess to początek. Możesz także zainstalować rozszerzenie fooman speedster. Rodzaj używanego serwera będzie również określał szybkość Twojego sklepu. Więcej wskazówek i lepsze wyjaśnienie tutaj http://www.interactone.com/how-to-speed-up-magento/

Tomasz
źródło
4

Podczas pierwszej instalacji miałem strony, których ładowanie trwało 30 sekund. Mój serwer nie został wyczerpany w pamięci RAM lub procesorze, więc nie wiedziałem, co robić. Patrząc na panel sieciowy firebuga, ładował około 100 plików na stronę, a połączenie trwało długo. Po zainstalowaniu fooman speedster i gzip w htaccess czasy ładowania spadły do ​​3 sekund, tak jak to było na innych wózkach sklepowych na moim serwerze.

Scott
źródło
3

Magento działa bardzo wolno, ponieważ projekt bazy danych nie jest zbyt dobry. Kod jest bałaganem i bardzo trudny do aktualizacji i optymalizacji. Zatem wszystkie optymalizacje są wykonywane za pośrednictwem pamięci podręcznej zamiast kodu.

Z drugiej strony. Jest to sklep internetowy z wieloma narzędziami. Więc jeśli potrzebujesz elastycznego sklepu internetowego, po prostu kup bardzo wydajny serwer i wszystko będzie dobrze.

deweloper
źródło
1
Projekt bazy danych jest w rzeczywistości bardzo dobry i elastyczny.
Czarny
3

sprowadzi się również do funkcjonalności i wydajności.

Surową wydajność uzyskuje się za pomocą nginx, php-fpm, memcached, apc i odpowiednio zaprojektowanego serwera.

Funkcjonalnością, taką jak wydajność plesk i magento, można zarządzać, biorąc całą infrastrukturę z perspektywy podczas projektowania chmury wydajnościowej Magento.

ProContractors
źródło