Чому Magento так повільний? [зачинено]


138

Магенто зазвичай такий страшенно повільний?

Це мій перший досвід роботи з цим, і панель адміністратора просто потребує віку, щоб завантажити та зберегти зміни. Це встановлення за замовчуванням з даними тесту.

Сервер, на якому він розміщений, дуже швидко обслуговує інші не-Magento сайти. Що про PHP-код, який використовує Magento, робить його так повільно, і що можна зробити, щоб його виправити?


12
На якому апараті ви працюєте? Моєму досвіду Magento потрібна серйозна підтримка обладнання.
тремтіння

3
Я не прошу підтримку, а код. Я сподівався, що хтось це раніше відчував і оптимізував код, щоб уникнути такої млявої поведінки. У мене немає конкретного фрагмента коду, на який можна вказати, оскільки він застосований на всьому сайті. Мені доведеться вивчити цю справу далі.
містер-євро

18
Magento має файли класу 6000+ і створений для корпоративного використання, а не для домашнього використання. Без APC не думайте про її встановлення. Я не рекомендую це для невеликих магазинів.
Ельзо Валугі

1
Щодо вашого прапора, @Jonesome: це запитання дуже широке і ... ймовірно, дещо датоване на даний момент. Зважаючи на це, зараз у нас є спеціалізований сайт для питань Magento ( Magento ), який, ймовірно, буде хорошим ресурсом для всіх, хто працює над оптимізацією їх налаштування.
Shog9

1
@ Shog9 Я керую командою, яка розробляє та підтримує додатки для магенто. Я можу вам сказати, що ця точна проблема виникає майже щодня. Magento - це не "звичайне" додаток для ламп, оскільки воно дуже (дуже) ресурсомістке. Ця нитка важлива. Закриття це змушує цю загальну розмову про СА, що прикро для всіх.
Jonesome Reinstate Monica

Відповіді:


184

Я лише брав участь в оптимізації Magento для продуктивності, але ось кілька причин, чому система настільки повільна

  1. Частини Magento використовують систему баз даних EAV, впроваджену поверх MySQL. Це означає, що запит на одну "річ" часто означає запит декількох рядків

  2. За лаштунками є багато речей (конфігурація додатків, конфігурація системи, конфігурація компонувань тощо), які передбачають складання гігантських XML-дерев у пам'яті, а потім "запитування" тих самих дерев для отримання інформації. Це займає як пам'ять (зберігання дерев), так і процесор (розбір дерев). Деякі з них (особливо дерево макета) величезні. Крім того, якщо кешування не ввімкнено, ці дерева створюються з файлів на диску та за кожним запитом .

  3. Magento використовує свою систему конфігурації, щоб дозволити переосмислювати класи. Це потужна функція, але це означає, що в будь-який момент модель, помічник або контролер буде створено, додаткові інструкції PHP потрібно запустити, щоб визначити, чи потрібен оригінальний файл класу або перезапис файлів класу. Це додає.

  4. Окрім системи компонування, система шаблонів Magento передбачає багато рекурсивного відображення. Це додає.

Загалом, перед інженерами Magento було поставлено завдання, перш за все, створити найбільш гнучку, налаштовану систему, і пізніше переживати про продуктивність.

Перше, що ви можете зробити для забезпечення кращої продуктивності - це кешування поворотів (Система -> Кеш керування). Це позбавить від блокування процесора / диска, яке продовжується, поки Magento будує свої різні дерева XML.

Друге, що ви хочете зробити, це переконатися, що ваша команда приймаючого та оперативного персоналу має досвід налаштування продуктивності Magento. Якщо ви покладаєтесь на план 7 доларів на місяць, щоб побачити вас, ну, удачі в цьому.


10
Дякую за широке пояснення. Magento дійсно є дуже потужним, дозволяючи забезпечити гнучкість. Спочатку я думав, що це просто БД записує затримку через погано написаний SQL, але я зараз розумію, що за кулісами спочатку очікується набагато більше. Як зауваження: кешування було вимкнено через продукти, які додав власник магазину. Коли кеш був увімкнено, він скаржився на те, що продукти не з’являються, примушуючи мене відключити кешування під час створення магазину. Він розміщений на спеціалізованому сервері, але, здається, мені доведеться перенести Magento до власної ексклюзивної скриньки.
містер-євро

4
Я профілював це деякий час тому з XHProf. Аналіз XML зайняв величезну кількість часу - я думаю, ви описуєтесь у цьому списку.
Морган Токер

1
Мені було цікаво, чи не покращить це Magento на HHVM. Востаннє я перевірив, що HHVM не підтримує Magento, але якби це було зроблено, чи допоможе це?
Bharadwaj Srigiriraju

1
Це багато що пояснює. Знання - це половина битви. Я не бачу, як це не можна вважати конструктивним.
flcoder

Не забувайте оптимізувати файли автозавантажувача композитора (див. Рекомендації щодо продуктивності magento), якщо ви використовуєте композитор, і - для Magento2 - увімкніть режим виробництва! Лак - це також дуже гарна ідея, якщо ваш додаток не має проблем із кешем повних сторінок.
Дмитро

54

Окрім рекомендацій Алана Шторма щодо кешування, я б особливо рекомендував переглянути два аспекти кешування:

- Переконайтесь, що кешування знаходиться в пам'яті, а не на диску.

Я доглядаю за парою встановлень magento, і як тільки ви отримуєте будь-яке навантаження в системі, складовані пам’яті починають працювати набагато швидше. І його мертвим легко змінити його (відносно того, щоб робити інші речі магенто хоча б!)

Хороша відправна точка тут: http://www.magentocommerce.com/boards/viewthread/12998/P30/ - але якщо ви раніше не використовували спогади, варто також ознайомитись із загальною інформацією про це.

- Увімкнути кешування шаблону / перегляду.

Це гарна стаття: http://inchoo.net/ecommerce/magento/magento-block-caching/

На сайті magento теж є хороші (кешування блоків google magento), але на даний момент він знижений.

Щоб додати два мої центи до кешування блоків, я б радив вам створити власні блоки в / app / code / local, розширити основні елементи та визначити параметри кешу, назвати їх xxx_Cache, а потім оновити ваш макет, щоб замість цього використовувати ці блоки основних. Таким чином, ви уникнете втрати змін або порушення системи під час оновлення magento.


3
Thx для очок. Я буду дивитись на печені, які раніше не використовували у виробництві. Гарна ідея про клонування блоків теж.
м-н-євро

3
По-друге, те, що сказав benlumbey, я не використовую memcached, коли я працюю на сервері Windows, але я зберігаю каталог / var у твердотільному диску, і це мало велике значення для мене.
Rick J

@rickj - Так, що-небудь зробити ./var папка швидше, безумовно, допомагає, я спробував використовувати tmpfs і до того часу, як запам'ятовувався, і отримав пристойний приріст від цього теж.
benlumley

Я хотів би додати, щоб використовувати кеш apc лише для одного вузла, оскільки він, мабуть, має менші накладні витрати, ніж запам’ятовується для середовища з кількома вузлами.
sbditto85

2
Так, правда. Але є деякі застереження, залежно від того, як ви запускаєте PHP, ви можете закінчити окремий кеш APC для кожного PHP-процесу - що стає ще менш оптимальним, якщо ви циклізуєте ваші PHP-процеси для кожного запиту X.
benlumley

23

Якщо ви ще цього не бачили, Magento та Rackspace об'єдналися, щоб створити білий документ про налаштування продуктивності Magento. Це чудово. https://support.rackspace.com/whitepapers/building-secure-scalable-and-highly-available-magento-stores-powered-by-rackspace-solutions/

--- редагувати ---

Ще один чудовий ресурс, недавно доступний (жовтень 2011 р.): Http://www.sessiondigital.com/assets/Uploads/Mag-Perf-WP-final.pdf

(Спасибі завдяки Алану Шторму на цьому.)


Дякую за оновлення, я прочитаю його детально пізніше.
містер-євро

2
Ця друга посилання тепер мертва.
Лайзер

1
Перша посилання теж мертва.
Едвард

Посилання розірвані. Ner
Ner

1
Пряме посилання на Whitepaper Paper Rackspace (посилання №1).
Леві Фігейра

17

Можливо, також існує дуже неочевидна причина, чому ваш інтерфейс адміністратора дуже повільний. У Magento є модуль під назвою Mage_AdminNotification. Спробуйте вимкнути цей доп. Тому що це - запит magentocommerce.com на нові повідомлення про оновлення. Якщо їхні сервери повільні, ваша сторінка адміністратора чекає і фактично повільна через відставання в мережі та завантаження зовнішніх новин. Якщо ви забезпечили підключення вихідного сервера через брандмауер, це може бути ще більше засмучувати, оскільки інтерфейс адміністратора буде чекати часу очікування, коли він не може досягти magentocommerce.com

Щоб відключити його: перейдіть до Система -> Конфігурація, прокрутіть донизу та натисніть Додатково (у розділі Додатково). Тепер відключіть Mage_AdminNotificationі збережіть!


4
Це значно змінило продуктивність у моєму локальному середовищі розробників, що завжди засмучувало мене тим, наскільки повільно він працює на дуже швидкій коробці розвитку. Дякую!
random_user_name

У Magento2: Магазини-> Конфігурація-> Додатково-> Додатково, а потім відключіть Mage_AdminNotification.
Скотт C Вілсон

6

Я маю лише поверхневий досвід з Magento. Я встановив його на спільному сітковому сервері, і завантаження сторінки було похмурим ~ 5 + секунд. На жайворонку я встановив його на своєму оптимізованому для CMS-сайтів виділеному сервері, і він почувався дуже-дуже спритно.

Мій присвячений хостинг мав ~ 10 Joomla! сайти та працює VBullitin.

Я здогадуюсь, що це просто не буде виконавцем спільного хостингу. Завищена підписка просто не дозволить Magento працювати так, як слід.


6

Я більше займаюся оптимізацією керованого сервера у своїй компанії, але, можливо, я буду мати кілька порад для вас. По-перше, ви можете більш детально переглянути код за допомогою функції відстеження коду на сервері Zend. Це дозволить вам побачити, де і коли речі забрудниться.

Я повністю поділяю думку Benlumley щодо кешу. Більшість сайтів, на яких ми розміщуємо, навіть не дозволяють кешувати блокування. Цей кеш повинен бути явно викликаний, а не "припускатися". Тож якщо ви ще не взяли участь у цьому механізмі, це обов'язково потрібно спробувати. Якщо у вас версія EE, ви можете отримати повну сторінку, щоб отримати найкраще звіра.

Зворотний проксі також дуже допоможе. Це буде кешувати статичні ресурси, значно знизивши тиск на стек інтерпретації php ваших передніх серверів.

Не забудьте записати сеанси & Magento кеш на диск RAM. Це також неодмінно переведе вас на інший рівень виступів.

Тут ще багато чого можна сказати, але мені не вистачає часу. Ви повинні знати, що хороший сайт, добре кодований у версії 1.4.1 CE, працює на сервері оперативної пам’яті 2x5650 Xeon + 16 ГБ та має Rproxy зверху, може приймати до 50 000 унікальних відвідувачів на день із гладкими сторінками для всіх .


5

Перехід від Apache до LiteSpeed ​​нам дуже допоміг. На додаток до: Редагування параметрів MySQL, встановлення Fooman Speedster (модуль для стиснення / комбінування файлів js та css) та встановлення APC. Magento також опублікував білий документ про те, як досягти найкращої продуктивності від корпоративного видання, але він однаково застосовний до інших версій: http://www.magentocommerce.com/whitepaper/


4

Є багато причин, через які ваш кошик Magento міг працювати повільно, але немає виправдань, оскільки існує безліч способів усунути проблему та зробити її досить швидкою. Увімкнення Gzip шляхом зміни файлу htaccess - це початок. Ви також можете встановити розширення fooman speedster. Тип використовуваного сервера також визначатиме швидкість вашого магазину. Більше порад та кращого пояснення тут http://www.interactone.com/how-to-speed-up-magento/


4

Коли я вперше встановив, у мене з’явилися сторінки, на які було потрібно 30 секунд. Мій сервер не був розміщений в операційному режимі чи процесорі, тому я не знав, що робити. Дивлячись на мережеву панель firebug, вона завантажувала близько 100 файлів на сторінку, і кожен з них потребував тривалого часу для підключення. Після встановлення fooman speedster та gzip у htaccess навантаження час зменшився до 3 секунд, як вони були на інших кошиках для мого сервера.


3

Magento дуже повільний, оскільки дизайн бази даних не дуже хороший. Код безладдя і дуже важко оновити та оптимізувати. Тож усі оптимізації проводяться через кеш, а не код.

З іншої сторони. Це веб-магазин з великою кількістю інструментів. Тож якщо вам потрібен гнучкий веб-магазин, просто купіть дуже потужний сервер, і вам буде все в порядку.


1
Дизайн бази даних насправді дуже хороший та гнучкий.
Чорний

3

вона також знизиться до функціональності та продуктивності.

Сирі показники отримують за допомогою nginx, php-fpm, memcached, apc та належним чином розробленого сервера.

Такими функціональними можливостями, як виконання plesk та magento, можна керувати, враховуючи всю інфраструктуру в перспективі при проектуванні хмари продуктивності magento.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.