Правильний метод промивання кешів та керування компілятором


25

Я хотів би знати, чи є якась краща процедура для наступного:

  1. Промивання кешу Magento
  2. Увімкнення / вимкнення компілятора Magento

1. Промивання кешу Magento

Тут є кілька варіантів, а саме:

  • Перевірка позицій та подання оновлення зі Actionsспадного поля
  • Натиснувши Flush Magento Cacheкнопку, і
  • Клацання Flush Storage Cacheкнопки

Чи є якийсь кращий порядок, коли це робити? Яка різниця між кешем Magento і кешем Storage?

2. Увімкнення / вимкнення компілятора Magento

a) Увімкнення компілятора

Що стосується включення компілятора Magento, чи повинні бути включені всі сховища магазину? Або ви повинні активувати кеші лише після включення компілятора та запуску процесу компіляції? Після включення компілятора слід оновити всі кеші? Якщо це так, чи включає це промивання кешу Magento & кеш пам’яті (як згадувалося вище)

b) Відключення компілятора

Якщо мова йде про відключення компілятора Magento, то слід спочатку вимкнути всі кеші, а потім повторно включити їх після його відключення?

Чи є якась різниця між тим, як залишити кеші і вимкнути / включити компілятор? Який вплив на продуктивність це викликає?

Будь-який внесок буде дуже вдячний


Його легко запам’ятати. Не заливайте кеш-пам'ять у виробничому магазині. Не вмикайте кеш-пам'ять у магазині розробок.
Бен Лессані - Сонассі

1
І якщо промивання кешу у вашому виробничому магазині спричиняє збій сайту, ви не зробили достатньо тестування на своєму сервері постановки, і якийсь поганий код пройшов, отже, "Не вмикайте кеш у магазині розробки". Промивання кешу ніколи не може спричинити збій Magento. Помилка CBR (Здійснення до готовності)
Labs Fiasco

Відповіді:


20

Flush Magento Cache - це очищає кеш (var / cache) будь-яких елементів, які Magento знає, що він створив.

Зберігання кеш-пам'яті Flush - Очищає все в var / cache, незалежно від того, як створені ці файли там.

Отже, якщо ви хочете бути в безпеці, ви очищаєте все, ви можете вибрати " Flush Cache Storage ", який по суті очистить var / cache.

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

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

Якщо ви багато не тестуєте речі, я б завжди рекомендував залишати кеші. Компіляція може бути вражена або пропущена з точки зору продуктивності. Я бачив, як це робить швидше, і багато разів переглядається компіляція робить все повільніше і викликає проблеми з розширеннями сторонніх розробників. Я рекомендую отримати базову лінію для часу завантаження сторінки категорії (використовуючи Firebug / інструменти для розробників), коли компіляція вимкнена, потім знову з компіляцією, і перевірте, чи є велика різниця.

Вам, ймовірно, буде краще використовувати такі речі, як кеш-код опкоду в PHP, належне кешування запитів MySQL, комбінування файлів css / js, використання компресії gzip, використання розширення кешу на повній сторінці та правильні настройки кешування файлів браузера.


15

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

Система-> Кеш керування

у бекенді. Ви можете побачити різні області кешування, які можна ввімкнути / вимкнути, такі як будь-які конфігурації, layout.xml, блоки, повна сторінка та api-файли. Очевидно, ідеальним є все це ввімкнути, як тільки веб-сайт стає активним.

Кеш можна також очистити або видалити звідси. Натискання кнопки, що позначена міткою “Flush Magento Cache”, очищає файли кешу, які відповідають певному набору вбудованих тегів за замовчуванням, які використовує Magento. Це "безпечніший" спосіб очищення кешу, оскільки він не очищає абсолютно все. Якщо ви використовуєте будь-які вторинні типи кешу, натисніть кнопку“Flush Cache Storage” гарантує, що ви очистили кеш, оскільки він очищає ВСЕ. Дві інші кнопки, які ви бачите на сторінці адміністратора, очистять javascript, css та каталоги.

Альтернативний та трохи менш безпечний спосіб очищення кешу - навігація до

websiteroot / var / кеш

і вручну видалити всі файли. Те саме стосується

websiteroot / var / full_page__cache

якщо у вас увімкнено кеш повних сторінок.

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

websiteroot / app / code / core / Enterprise / PageCache / тощо / cache.xml

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

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

Функцію компіляції Magento можна знайти у статті

Система> Інструменти> Компіляція

Якщо ви працюєте з новою установкою, ви, ймовірно, отримуєте системні повідомлення про те, що обидва includes and includes/src/каталоги повинні бути написані для запису. Коли це зроблено, ми можемо натиснути кнопку «Запустити процес компіляції», і ви, в основному, готові, ядро ​​Magento використовує компіляцію.

Коли Magento компілює його вихідний код, рамка робить кілька речей. Будучи або спрацьовує через адміністратор або shell, see shell/compiler.php, все компіляції виконуються одним класом: Mage_Compiler_Model_Process. У межах цього класу ви знайдете наступний фрагмент, який насправді є видом пташиного польоту на весь процес.

/**
     * Run compilation process
     *
     * @return Mage_Compiler_Model_Process
     */
    public function run()
    {
        $this->_collectFiles();
        $this->_compileFiles();
        $this->registerIncludePath();
        return $this;
    }

Початок $this->_collectFiles();дзвінка, Magento копіює всі файли PHP з обох

додаток / код

і lib каталоги на

/ включає / src

каталог. Як видно з фрагмента нижче: під час цього процесу Magento рекурсивно повторює всі файли та каталоги. Ці шляхи з часом використовуються як ім'я файлу. Коли рекурсивний процес потрапить у файл, він перевірить на розширення PHP, і, коли його знайдуть, файл скопіюється в каталог компілятора. Інші типи файлів залишаються недоторканими.

Як приклад: шлях до класу Mage_Catalog_Model_Category був

app / code / core / Mage / Каталог / Модель / Category.php

але з увімкненою компіляцією тепер стало

включає / src / Mage_Catalog_Model_Category.php

/**
     * Copy files from all include directories to one.
     * Lib files and controllers files will be copied as is
     *
     * @return Mage_Compiler_Model_Process
     */
    protected function _collectFiles()
    {
        $paths  = $this->_getIncludePaths();
        $paths  = array_reverse($paths);
        $destDir= $this->_includeDir;
        $libDir = Mage::getBaseDir('lib');

        $this->_mkdir($destDir);
        foreach ($paths as $path) {
            $this->_controllerFolders = array();
            $this->_copy($path, $destDir); // this one will run recursively through all directories
            $this->_copyControllers($path);
            if ($path == $libDir) {
                $this->_copyAll($libDir, $destDir);
            }
        }

        $destDir.= DS.'Data';
        $this->_mkdir($destDir);
        $this->_copyZendLocaleData($destDir);
        return $this;
    }

Контролери отримують інше лікування. Усі каталоги контролерів скопійовані в

включає / src /

але вони зберігаються в каталозі, який має ім'я пов’язаного простору імен, подумайте: Mage, Enterprise або ваш власний простір імен.

У цих каталогах простору імен контролери зберігаються на модулі, а структура каталогу контролерів залишається недоторканою. Те саме стосується і назви файла, це лише точна копія. Всю цю логіку можна знайти в наступному методі$this->_copyControllers($path);

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

/**
     * Compile classes code to files
     *
     * @return Mage_Compiler_Model_Process
     */
    protected function _compileFiles()
    {
        $classesInfo = $this->getCompileClassList();

        foreach ($classesInfo as $code => $classes) {
            $classesSorce = $this->_getClassesSourceCode($classes, $code);
            file_put_contents($this->_includeDir.DS.Varien_Autoload::SCOPE_FILE_PREFIX.$code.'.php', $classesSorce);
        }

        return $this;
    }

За замовчуванням Magento створює чотири різні файли області:

__default.php, __catalog.php, __checkout.php та __cms.php

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

Маючи всі файли на місці та зібрані, Magento готовий включити функцію компіляції для використання.

Не в останню чергу налаштована конфігурація, пов’язана з компіляцією. Цей файл можна знайти на includes/config.phpі містить дві наступні константи. Після ввімкнення компіляції рядок щодо COMPILER_INCLUDE_PATH не коментований і, таким чином, готовий до дії.

> #define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');
> #define('COMPILER_COLLECT_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'stat');

Код, який відповідає за коригування файлу конфігурації, можна знайти в методі registerIncludePath Mage_Compiler_Model_Process class.

Під час завантажувального файлу файл конфігурації компіляції включається в index.php file (around line 44). Це робить константи include_path доступними протягом усього фрейму. Collection_path - це те, що ви можете ввімкнути лише вручну, щоб отримати більш статистичну інформацію про використання ваших компільованих файлів. Це не повинно бути ввімкнено в прямому ефірі.

/**
 * Compilation includes configuration file
 */
$compilerConfig = 'includes/config.php';
if (file_exists($compilerConfig)) {
    include $compilerConfig;
}

З цього моменту Magento перевірить, чи включений режим компіляції за допомогою наступного твердження. Пройшовши через кодову базу (використовуючи 'grep'), ви помітите, що більшість цієї логіки можна знайти у lib/Varien/Autoload.phpфайлі.

if (defined('COMPILER_COLLECT_PATH')) {
            // do stuff
        }

Інше місце, де потрібно звернути увагу - це Mage_Core_Controller_Varien_Action. У цьому класі ви знайдете preDispatch()метод, який запускається для кожного методу дії контролера до того, як метод буде фактично відправлений. У цій частині джерела класу автозавантажувачів Magento Varien_Autoload вимагається завантажити специфічний файл області компіляції.

 Mage::dispatchEvent('controller_action_predispatch', array('controller_action'=>$this));
        Mage::dispatchEvent(
            'controller_action_predispatch_'.$this->getRequest()->getRouteName(),
            array('controller_action'=>$this)
        );
        Varien_Autoload::registerScope($this->getRequest()->getRouteName()); // right here
        Mage::dispatchEvent(
            'controller_action_predispatch_'.$this->getFullActionName(),
            array('controller_action'=>$this)
        );

Під час запуску в режимі компіляції Magento має лише один включений шлях до includes/src/каталогу, тому кожен файл знаходиться безпосередньо при першій спробі. Завдяки значній кількості файлів, які має Magento, це економить досить багато часу. Нижній фрагмент взято з

app / Mage.php

if (defined('COMPILER_INCLUDE_PATH')) {
    $appPath = COMPILER_INCLUDE_PATH;
    set_include_path($appPath . PS . Mage::registry('original_include_path'));
    include_once "Mage_Core_functions.php";
    include_once "Varien_Autoload.php";
} else {
    /**
     * Set include path
     */
    $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local';
    $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community';
    $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core';
    $paths[] = BP . DS . 'lib';

    $appPath = implode(PS, $paths);
    set_include_path($appPath . PS . Mage::registry('original_include_path'));
    include_once "Mage/Core/functions.php";
    include_once "Varien/Autoload.php";
}

Коли PHP включає файл, вміст складається для кодування. Це процес, який потрібно робити щоразу, коли файл включається. Щоб ще більше покращити роботу вашого магазину, ви можете встановити APC на свій сервер. APC кешує кодовані версії файлів, роблячи їх доступними для наступних запитів. Тож після наступного запиту: файл буде читатися з кешу APC, замість того, щоб повторно пройти той же процес і виправити вашу ефективність.


3

КОМПІЛЕР

Усі файли компілятора можна знайти в розділі includes/Просто не стирайте .htaccessабо config.php. Якщо ви переглядаєте, config.phpви помітите, що компілятор увімкнення / вимкнення робить це видалення коментарів #перед ними define. Безпечно припустити, що простий rm -Rf includes/src;rm -Rf includes/statз кореня Magento буде стерти зібрані дані.

Також розгляньте можливість використання AOE_ClassPathCache разом з APC, оскільки цього буде досить далеко, щоб видалити компілятор з рівняння.

Також для більшого обговорення на цю тему:


КАШИ

Це чітко визначено, які кеш-файли ви використовуєте через свій local.xml. Якщо ви використовуєте filesобробник кеша за замовчуванням , тоді витирайте var/cacheі якщо Enterprise var/full_page_cache. Якщо ви використовуєте сховище даних, наприклад Memcache, вам потрібно буде це зробити через Magento Flush Cache Storageабо через засоби, що зберігаються в кеш-пам'яті, щоб очистити / витерти його кеш.

Для отримання більш детальної інформації про можливі сховища даних Magento використовує Zend_Cache для своїх механізмів кешування. Що ви помітите, стосуються local.xmlкеша Xpaths.


ПРИМІТКА

Якщо ви працюєте з Enterprise, ви знайдете другий файл конфігурації etc/enterprise.xml, де визначено сховище даних для FPC.

Яка різниця між кеш-файлом флеш-пам’яті та зберіганням кеш-пам’яті Flush:


0

Дуже важлива примітка про компілятор Magento. Вам потрібно вимкнути такі речі, як APC, коли робите компіляцію, оскільки компілятор не може зібрати те, що є в APC, і зіпсує вашу компіляцію. Для мене це означатиме розвантаження APC на сервері, а потім перезапуск Apache (httpd).

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