профайлер Magento 2

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

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

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

Давайте перейдемо одразу до справи.

Що таке Magento 2 Profiler?

Magento 2 profiler – це інструмент за замовчуванням для налагодження продуктивності. Він дає уявлення про час завантаження різних блоків, а також про обсяг виділеної та використаної пам'яті для виконання завдання.

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

 Профайлер magento

З детального звіту ви можете дізнатися:

  • Timer Id — назва виконаного блоку
  • Time — час, витрачений на виконання коду в секундах
  • Avg — середній час, витрачений на виконання коду в секундах
  • Cnt — кількість разів, коли блок мав бути запущений для створення необхідного результату
  • Emalloc — Пам'ять PHP, виділена для цього процесу
  • RealMem — реальний обсяг пам'яті, що використовується для виконання процесу

Профілювання, описане вище, виконано у форматі HTML. Однак ви також можете вибрати тип CSV або Firebug, щоб переглянути деталі виконання коду у файлі. Ми розглянемо, як це зробити, у наступному розділі.

Як увімкнути профілювання в Magento 2?

Далі давайте подивимося, як увімкнути профілювання Magento 2. Є два способи вибрати: редагування файлу .htaccess або виконання команди CLI.

Увімкнути профілювання у файлі .htaccess

Щоб увімкнути профілювання за допомогою файлу .htaccess:

1. Перейдіть до кореневого каталогу Magento та відкрийте файл .htaccess.

2. Додайте наведений нижче рядок до файлу:

 SetEnv MAGE_PROFILER "type"

Примітка: Замініть "type" на "html", "csv" або "firebug" залежно від бажаного результату роботи профілювача.

HTML-профайлер буде відображатися внизу сторінок вашого фронтенду. Якщо ви оберете вхідні дані CSV або Firebug, ви знайдете звіт у файлі var/log/profiler.csv .

3. Перемкніть свій Magento на режим розробника :

php bin/magento deploy:mode:set developer

Ось так, профілювання ввімкнено.

Увімкнути профілювання через CLI

Ви також можете ввімкнути профілювання, виконавши команду CLI нижче:

php bin/magento dev:profiler:enable <type>

Тут вихід може бути або . Тож не забудьте встановити потрібний параметр.

Примітка: Якщо ви не вкажете тип виводу, за замовчуванням буде встановлено HTML.

Після виконання цієї команди створюється файл var/profiler.flag . Він видаляється після вимкнення профілювання пізніше.

Профайлер повідомляє вам, що викликає проблеми з продуктивністю. Однак він не пояснює, чому це відбувається. Тому, щоб побачити корінь проблеми, вам може знадобитися покращити процес профілювання.

Як покращити Magento 2 Profiler?

Більшість магазинів Magento використовують велику різноманітність розширень. Хоча вони корисні в одному відношенні, вони можуть змінювати стандартні процеси Magento та завантажувати продуктивність. Тому одним із рішень є перевірка тривалості роботи плагінів.

Ви можете досягти цього, покращивши звичайний Magento profiler.

1. Відкрийте Magento\Framework\Profiler () та знайдіть функцію public static function start($timerName, array $tags = null) . Додайте наступне:

static $wasLayoutRenderer = false;

перед функцією.

 Додавання коду перед функцією Magento

Потім вставте наступний код на початку тієї ж функції:

if ($timerName == 'magento') {
 self::$wasLayoutRenderer = true;
}


if (!self::$wasLayoutRenderer && strpos($timerName, 'MFMETHOD - ') === 0) {
 return;
}

 Модифікація функції Magento

Далі знайдіть функцію public static function stop($timerName = null) та модифікуйте першу if:

if (!self::$_enabled || !self::_checkTags(self::_getTags())) {
    return;
}
if (empty(self::$_pathIndex[$timerName])) {
   return;
}

Ось результат, який ви повинні отримати:

 Покращення профайлера

2. Перейдіть до методу Magento\PageCache\Model\Layout\LayoutPlugin () та знайдіть функцію public function afterGetOutput(Layout $subject, $result) . Перенесіть наступний рядок $tags[] = $block->getIdentities(); як показано нижче:

\Magento\Framework\Profiler::start('getIdentities ' . get_class($block) . ' ' . $block->getNameInLayout());
$tags[] = $block->getIdentities();
\Magento\Framework\Profiler::stop('getIdentities ' . get_class($block) . ' ' . $block->getNameInLayout());

 Оберніть метод Magento

3. Відкрийте Magento\Framework\Interception\Interceptor (trait) () та знайдіть функцію protected function ___callPlugins($method, array $arguments, array $pluginInfo) function.

Потім обгорніть цей рядок $beforeResult = $pluginInstance->$pluginMethod($this, ...array_values($arguments));

\Magento\Framework\Profiler::start('MFMETHOD - ' . get_class($this) . '::' . $method . ' | ' . get_class($pluginInstance) . '::' . $pluginMethod);
$beforeResult = $pluginInstance->$pluginMethod($this, ...array_values($arguments));
\Magento\Framework\Profiler::stop('MFMETHOD - ' . get_class($this) . '::' . $method . ' | ' . get_class($pluginInstance) . '::' . $pluginMethod);

Оберніть два наведені нижче рядки в цю функцію так, як ми це зробили вище:

$result = $pluginInstance->$pluginMethod($subject, $next, ...array_values($arguments));

$result = $pluginInstance->$pluginMethod($subject, $result, ...array_values($arguments));

 Покращення профайлера Magento 2

В результаті, покращений профайлер виглядатиме так:

 Покращений профайлер у Magento 2

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

Як вимкнути профілювання в Magento 2?

Після того, як ви виконали налагодження та дізналися, що знижує продуктивність, ви можете вимкнути профілювання. Щоб це зробити, виконайте команду CLI:

bin/magento dev:profiler:disable

Це вимкне профілювання та видалить файл profiler.flag. Ви можете перейти у виробничий режим і продовжити щоденну роботу вашого магазину.

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

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