В настоящее время я сталкиваюсь с медленной загрузкой страницы с проверкой, являющейся самой медленной из всех с :
- 28 запросов
- 18,5 КБ передано (остаток кэшируется с диска или памяти)
- Finish: 15.24s (загрузчик исчезает, и пользователь может что-то сделать)
- DOMContentLoaded: 6.45 с
- Загрузка: 10,28 с
Загрузка заказа / корзины заканчивается:
- 29 запросов
- Передано 28,5 КБ (остаток кэшируется с диска или памяти)
- Финиш: 6,35 с
- DOMContentLoaded: 1.9s
- Загрузка: 3,79 с
пока пустая корзина имеет это:
- 22 запроса
- 8,2 КБ передано (остаток кэшируется с диска или памяти)
- Финиш: 2,78 с
- DOMContentLoaded: 1,22 с
- Загрузка: 2,65 с
Я использую Redis для кэширования, и все кэши активны. Javascript минимизируется, объединяется и объединяется, а также CSS и HTML. Сервер довольно хорошо расположен с 8 процессорами, 16 ГБ оперативной памяти и SSD. Нагрузка и т. Д. Никогда не бывает достаточно высокой, чтобы о ней даже упоминали. В основном сервер спит ...
Всего около 80 товаров и один магазин. Мы не используем контентную часть Magento. Magento обслуживает только страницы с информацией о товаре, кассе и области клиента (а также бэкэнд). Перед Magento есть система CMS, которая обслуживает страницы менее чем за секунду, включая медиа.
Я вижу, что TTFB для кассового документа уже 5.66s. С включенным профилировщиком Magento я могу найти, что magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body
вызывает большую часть этого времени. Хотя не совсем понятно, чем именно это вызвано. Здесь профилировщик не может сильно помочь (мне по крайней мере).
magento->routers_match 5.347600 5.347600 1 42,063,304 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index 5.143997 5.143997 1 15,976,176 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body 5.143980 5.143980 1 15,975,304 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->EVENT:checkout_allow_guest 0.000609 0.000609 1 82.464 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->EVENT:checkout_allow_guest->OBSERVER:checkout_allow_guest 0.000592 0.000592 1 80.944 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT 0.106220 0.035407 3 13,085,544 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_load 0.000666 0.000666 1 136.56 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_xml 0.005658 0.005658 1 174.632 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks 0.099472 0.099472 1 12,755,648 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements 0.099462 0.099462 1 12,902,296 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements 0.091426 0.091426 1 11,885,184 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->EVENT:core_layout_block_create_after 0.000169 0.000003 51 -16.128 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements 0.000609 0.000609 1 52.76 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements 0.000455 0.000455 1 26.952 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->EVENT:layout_generate_blocks_after 0.000297 0.000297 1 16.32 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->EVENT:layout_generate_blocks_after->OBSERVER:persistent 0.000279 0.000279 1 14.776 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch 0.002972 0.002972 1 116.752 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch 0.002913 0.002913 1 110.192 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor 0.002900 0.002900 1 108.656 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags 0.001175 0.001175 1 77.784 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags->OBSERVER:invalidate_varnish 0.000516 0.000516 1 35.056 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags->OBSERVER:invalidate_builtin 0.000629 0.000629 1 41.08 0
Я также включил профилировщик базы данных, но ни один запрос не занимает более 1 мс, несмотря на почти 120 вызовов. Но это составляет всего 120 мс.
Я сгенерировал профиль xdebug локально и вижу, что большая часть времени тратится на автозагрузку. Но я не уверен, что это "нормально". Мне просто интересно, почему file_exists вызывается так часто. Как мне показалось, все предварительно скомпилировано и кэшировано. Я использую composer dump-autoload -o --apcu
после компиляции ди. И, конечно, APC работает.
И все же я застрял здесь на данный момент. Кажется, я не могу понять, почему TTFB уже 5 секунд. И даже если бы я решил, что есть еще 10 секунд, чтобы объяснить и исправить. В настоящее время я предполагаю, что это некоторые xhr-запросы в фоновой блокировке. То есть. Я вижу, что методы оценочной доставки начинаются только после интенсивно большого промежутка времени, равного 7 секундам в 13 секунд, и занимают около 647 мс. Почему это так долго ждать, чтобы вызвать это? До тех пор, пока это не закончится, отображается анимация загрузчика, заставляющая страницу «зависать».
Любые пожелания приветствуются! Я надеюсь, что загрузка страницы не превышает 2 - 4 секунды. так вот с чего я начал.
Изменить: я исправил высокий TTFB. Как я уже сказал, я использую Redis для кеширования. Также для кэширования сеансов, но это приводит к блокировке между двумя одновременными сеансами. Фактически это запрос на оформление заказа и запрос на расчетную доставку, что приводит к 5-секундному таймауту. Я переключил сеансы обратно в обычный файловый режим. К сожалению, это не исправило долгое время загрузки! Моя текущая лучшая догадка состоит в том, что что-то заставляет оценочные методы доставки ждать перед вызовом, что приводит к блокировке страницы. Кроме того, я попытался отложить все JS без каких-либо изменений.
Edit2: Как заметил @ peter-ocallaghan, проблема с такой медленной загрузкой извлечения (+10 секунд) на самом деле является просто проблемой, связанной с Chrome, с открытой консолью dev. Оформить заказ / корзина, похоже, не влияет.
Ответы:
Кажется, моя главная проблема - параллельный сеанс, происходящий по любой причине. Я попытался использовать сессионное кэширование с Redis, как предложено в документации.
Но так как у меня есть проблема блокировки сессии, я думаю, что это учитывается:
Это означает, что всегда есть задержка макс. 5 секунд. Когда я переключился на сессию memcached, стало немного лучше, потому что ожидание было меньше. По умолчанию используются следующие настройки:
Это значения по умолчанию из более старой версии php-memcached. Новейшая версия предлагает эти значения по умолчанию:
Прочитав эти два документа: https://github.com/php-memcached-dev/php-memcached/pull/350 https://github.com/php-memcached-dev/php-memcached/issues/269.
Я пробовал с:
в index.php Magento, и это снова ускоряет процесс. Теперь я получаю нагрузку проверки примерно за 4 секунды. Корзина немного медленнее с ~ 5 секундами из-за загрузки итоговой информации. (все сначала попробуйте без кеширования браузера)
Я полагаю, что исправление проблемы с блокировкой сеанса снова ускорило бы время загрузки, поскольку просмотр профилей показывает, что
session_start()
для нескольких вызовов все еще существует ожидание от 300 до 800 мс.источник
Возможные оптимизации:
Profiler
источник
Используя Solar, Memcache или Varnish, вы можете ускорить свой сайт magento.
источник