Почему Magento такой медленный? [закрыто]

139

Magento обычно ужасно медленный?

Это мой первый опыт работы с ним, и админке просто требуется много времени, чтобы загрузить и сохранить изменения. Это установка по умолчанию с тестовыми данными.

Сервер, на котором он размещен, очень быстро обслуживает другие сайты, не относящиеся к Magento. Что такого медленного в PHP-коде, который использует Magento, и что можно сделать, чтобы это исправить?

MR-евро
источник
12
На каком оборудовании вы его используете? По моему опыту, Magento нуждается в серьезной аппаратной поддержке.
jitter
3
Я прошу не поддержки, а код. Я надеялся, что кто-то сталкивался с этим в прошлом и оптимизировал код, чтобы избежать такого вялого поведения. У меня нет конкретного фрагмента кода, на который можно было бы указать, поскольку он применим ко всему сайту. Мне нужно будет разобраться в этом вопросе.
mr-euro
18
Magento имеет 6000+ файлов классов и создан для корпоративного использования, а не для домашнего использования. Без APC даже не думайте об установке. Я не рекомендую это для небольших магазинов.
Эльзо Валуги,
1
Что касается вашего флага, @Jonesome: этот вопрос очень широкий и ... вероятно, несколько устарел на данный момент. Тем не менее, теперь у нас есть специальный сайт для проблем с Magento ( Magento ), который, вероятно, станет хорошим ресурсом для всех, кто работает над оптимизацией своей настройки.
Shog9
1
@ Shog9 Я руковожу командой, которая разрабатывает и поддерживает дополнения для magento. Могу вам сказать, что именно эта проблема возникает почти ежедневно. Magento не является «обычным» приложением для ламп, поскольку оно очень (очень) ресурсоемкое. Эта тема важна. Его закрытие приводит к отключению этого общего разговора от SO, что для всех печально.
Jonesome Reinstate Monica

Ответы:

185

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

  1. Некоторые части Magento используют систему баз данных EAV, реализованную поверх MySQL. Это означает, что запрос одной "вещи" часто означает запрос нескольких строк.

  2. За кулисами скрывается множество вещей (конфигурация приложения, конфигурация системы, конфигурация компоновки и т. Д.), Которые включают построение гигантских деревьев XML в памяти с последующим «запросом» информации по этим же деревьям. Для этого требуется как память (хранение деревьев), так и процессор (анализ деревьев). Некоторые из них (особенно дерево макета) огромны. Кроме того, если не включено кеширование, эти деревья строятся из файлов на диске и по каждому запросу .

  3. Magento использует свою систему конфигурации, чтобы вы могли переопределять классы. Это мощная функция, но она означает, что каждый раз при создании экземпляра модели, помощника или контроллера необходимо запускать дополнительные инструкции PHP, чтобы определить, нужен ли исходный файл класса или файлы классов переопределения. Это складывается.

  4. Помимо системы макета, система шаблонов Magento включает в себя много рекурсивного рендеринга. Это складывается.

В общем, перед инженерами Magento была поставлена ​​задача, прежде всего, создать максимально гибкую, настраиваемую систему, а потом беспокоиться о производительности.

Первое, что вы можете сделать, чтобы обеспечить лучшую производительность, - это включить кеширование (Система -> Управление кешем). Это снимет часть блокировки ЦП / диска, которая происходит, пока Magento создает различные деревья XML.

Второе, что вам нужно сделать, это убедиться, что ваш хост и операционная команда имеют опыт настройки производительности Magento. Если вы рассчитываете на план в 7 долларов в месяц, чтобы довести вас до конца, что ж, удачи в этом.

Алан Сторм
источник
10
Спасибо за подробное объяснение. Magento действительно очень мощный, но допускающий гибкость. Сначала я думал, что это просто остановка записи в БД из-за некорректно написанного SQL, но теперь я понимаю, что за кулисами происходит гораздо больше, чем изначально ожидалось. Обратите внимание: кеширование было отключено из-за добавления товаров владельцем магазина. Когда кеш был включен, он жаловался на то, что товары не появляются, вынуждая меня отключить кеширование, пока магазин настраивался. Он размещается на выделенном сервере, но, похоже, мне придется перенести Magento в его собственный эксклюзивный ящик.
mr-euro
4
Некоторое время назад я профилировал его с помощью XHProf. Разбор XML занял огромное количество времени - я думаю, вы попали в этот список.
Morgan Tocker
1
Мне было интересно, улучшит ли это запуск Magento на HHVM. В последний раз я проверял, что HHVM не поддерживает Magento, но если бы это было сделано, помогло бы это?
Бхарадвадж Сригирираджу
1
Это многое объясняет. Знание - это половина дела. Я не понимаю, как это нельзя считать конструктивным.
flcoder
Не забудьте оптимизировать файлы автозагрузчика композитора (см. Руководство по производительности Magento), если вы используете композитор, и - для Magento2 - включите производственный режим! Varnish также является очень хорошей идеей, если у вашего приложения нет проблем с полностраничным кешем.
Дмитрий Сологубенко
54

В дополнение к рекомендациям Алана Сторма по кешированию, я особенно рекомендую вам изучить две вещи, связанные с кешированием:

- Убедитесь, что кэширование происходит в memcached, а не на диске.

Я слежу за парой установок magento, и как только вы получаете какую-либо нагрузку на систему, memcached начинает работать намного быстрее. И его очень легко изменить (по крайней мере, по сравнению с другими вещами Magento!)

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

- Включить кеширование шаблонов / представлений.

Это хорошая статья: http://inchoo.net/ecommerce/magento/magento-block-caching/

На сайте magento тоже есть хорошие (кеширование блоков google magento), но на данный момент он не работает.

Чтобы добавить мои два цента к кешированию блоков, я бы посоветовал вам создать свои собственные блоки в / app / code / local, расширить основные и определить параметры кеша, назовите их xxx_Cache и затем обновите макет, чтобы вместо них использовать эти блоки. из основных. Таким образом, вы не потеряете свои изменения или не сломаете систему при обновлении Magento.

Benlumley
источник
3
Спасибо за очки. Я посмотрю на memcached, который я раньше не использовал в производстве. Хорошая идея и о клонировании блоков.
mr-euro
3
Я согласен с тем, что сказал Бенлумбей, я не использую memcached, поскольку я запускаю сервер Windows, но я храню каталог / var на твердотельном диске, и это очень важно для меня.
Rick J
@rickj - да, все, что угодно, чтобы сделать папку ./var быстрее, определенно помогает, я тоже пробовал использовать tmpfs до memcached, и это тоже неплохо.
Benlumley 02
Я бы добавил, что использовать кеш apc только для одного узла, поскольку он, кажется, имеет меньше накладных расходов, чем memcached для среды с несколькими узлами.
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

(Спасибо за это Алану Сторму.)

Лайзер
источник
Спасибо за обновление, я прочту его подробнее позже.
mr-euro
2
Эта вторая ссылка теперь мертва.
Laizer
1
Первая ссылка тоже мертва.
Эдвард
Ссылки не работают. Ner
Ner
1
Прямая ссылка на технический документ Rackspace (ссылка №1).
Леви Фигейра
17

Возможно, существует также очень неочевидная причина, по которой ваш интерфейс администратора работает очень медленно. В Magento есть модуль Mage_AdminNotification. Попробуйте отключить этот доп. Потому что он запрашивает новые сообщения об обновлениях на magentocommerce.com. Если их серверы работают медленно, ваша страница администратора ждет и, по сути, работает медленно из-за задержки сети и загрузки внешних новостей. Если вы защитили исходящее соединение с сервером через брандмауэр, это может быть еще более неприятным, поскольку интерфейс администратора будет ждать тайм-аута, когда он не сможет связаться с magentocommerce.com.

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

Сэм Фигероа
источник
4
Это существенно изменило производительность моей локальной среды разработки, что всегда расстраивало меня, насколько медленно она работала в очень быстрой среде разработки. Спасибо!
random_user_name
В Magento2: Магазины-> Конфигурация-> Дополнительно-> Дополнительно, затем отключите Mage_AdminNotification.
Scott C Wilson
6

У меня лишь поверхностный опыт работы с Magento. Я установил его на общий грид-сервер, и загрузка страницы была унылой ~ 5+ секунд. Ради забавы, я установил его на свой выделенный сервер, оптимизированный для сайтов CMS, и он оказался очень и очень быстрым.

На моем выделенном хостинге было ~ 10 Joomla! сайты и сайт VBullitin работает.

Я предполагаю, что он просто не будет работать на виртуальном хостинге. Избыточная подписка не позволит Magento работать должным образом.

Creuzerm
источник
6

Я больше занимаюсь оптимизацией управляемых серверов в своей компании, но, возможно, дам вам несколько советов. Во-первых, вы можете более внимательно изучить код, используя функцию трассировки кода сервера Zend. Это позволит вам увидеть, где и когда вещи пачкаются.

Я полностью разделяю мнение Бенлумли относительно кеша. На большинстве сайтов, которые мы размещаем, даже не включено кеширование блоков. Этот кеш должен вызываться явно, а не «предполагаться». Так что, если ваш код еще не задействован в этом механизме, вы обязательно захотите попробовать это. Если у вас есть версия EE, вы можете получить полную страницу, чтобы получить лучшее от зверя.

Обратный прокси тоже очень поможет. Он кэширует статические ресурсы, значительно снижая нагрузку на стек интерпретации php ваших фронт-серверов.

Не забудьте записать сеансы и кеш Magento на RAM-диск. Это также обязательно выведет вас на другой уровень выступлений.

Здесь еще есть что сказать, но у меня не хватает времени. Вы должны знать, что хороший сайт, хорошо закодированный в версии 1.4.1 CE, работающий на сервере 2x5650 Xeon + 16 ГБ RAM и имеющий 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
Дизайн базы данных на самом деле очень хороший и гибкий.
Black
3

это также будет зависеть от функциональности по сравнению с производительностью.

Чистая производительность достигается с помощью nginx, php-fpm, memcached, apc и правильно спроектированного сервера.

Функциональными возможностями, такими как производительность plesk и magento, можно управлять, рассматривая всю инфраструктуру в перспективе при разработке облака производительности magento.

Проконтракторы
источник