Правильный метод очистки кэшей и управления компилятором


25

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

  1. Очистка кэша Magento
  2. Включение / отключение компилятора Magento

1. Очистка кэша Magento

Здесь есть несколько вариантов, а именно:

  • Проверка позиций и отправка обновления из Actionsвыпадающего списка
  • Нажав на Flush Magento Cacheкнопку, и
  • Нажав на Flush Storage Cacheкнопку

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

2. Включение / отключение Magento Compiler

а) Включение компилятора

Когда дело доходит до включения компилятора Magento, нужно ли включать все кэши хранилища? Или вы должны активировать кэши только после включения компилятора и запуска процесса компиляции? После того, как вы включили компилятор, вы должны обновить все кэши? И если да, то включает ли он очистку кеша и кеша хранения Magento (как упоминалось выше)

б) Отключение компилятора

Что касается отключения компилятора Magento, следует ли сначала отключить все кэши, а затем снова включить их после того, как он был отключен?

Есть ли разница между включением кэшей и отключением / включением компилятора? Какое влияние на производительность это вызывает?

Любой вклад будет высоко ценится


Его легко запомнить. Не очищайте кэш в производственном магазине. Не включайте кеш в магазине разработки.
Бен Лессани - Сонасси

1
И если очистка кеша в вашем производственном хранилище приводит к сбою сайта, вы не провели достаточного тестирования на промежуточном сервере, и какой-то плохой код прошел, поэтому «Не включайте кеш в хранилище разработки». Очистка кеша никогда не должна вызывать сбой Magento. Ошибка CBR (выполнить до готовности)
Fiasco Labs

Ответы:


20

Flush Magento Cache - очищает кэш (var / cache) от всех предметов, которые Magento знает, что он создал.

Flush Cache Storage - очищает все в var / cache, независимо от того, как были созданы эти файлы.

Итак, если вы хотите быть в безопасности, вы очищаете все, вы можете выбрать « Flush Cache Storage », который по существу очистит var / cache.

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

При отключении компиляции я сначала отключил бы ее, а затем очистил кэш Magento. Это снова гарантирует, что кэш очищен от любых скомпилированных данных.

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

Скорее всего, было бы лучше использовать такие вещи, как кэш кода операции в PHP, правильное кэширование запросов MySQL, объединение файлов css / js, сжатие gzip, расширение Full Cache и правильные настройки кэширования файлов в браузере.


15

Кеш Magento ничем не отличается. Начиная с основ, можно просмотреть параметры кэша, перейдя к

Система-> Управление кешем

в бэкэнде. Вы можете увидеть различные области кэширования, которые можно включить / отключить, такие как любые конфигурации, layout.xml, блоки, полная страница и файлы API. Очевидно, что в идеале все они должны быть включены, как только сайт заработает.

Отсюда также можно очистить или очистить кэш. Нажатие кнопки с меткой “Flush Magento Cache”очистит все файлы кэша, которые соответствуют определенному набору встроенных тегов по умолчанию, которые использует Magento. Это «более безопасный» способ очистки кэша, поскольку он не очищает абсолютно все. Если вы используете какие-либо дополнительные типы кеша, то щелчок “Flush Cache Storage”гарантирует, что вы очистили кеш, так как он очищает ВСЕ. Две другие кнопки, которые вы видите на странице администратора, будут очищать javascript, css и каталог изображений.

Альтернативный и немного менее безопасный способ очистки кэша - переход к

websiteroot / вар / кэш

и вручную удалив все файлы. То же самое касается

websiteroot / вар / full_page__cache

если у вас включен полный кеш страниц.

Полный кеш страниц, доступный в Enterprise Edition, ускоряет ваш сайт в 10 раз, но важно знать об этом немного, на случай, если вы заметите, что любой динамический контент кэшируется. Интересный файл для просмотра

websiteroot / приложение / код / ​​ядро ​​/ Enterprise / кэш страниц / и т.д. / 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 был

Приложение / код / ​​ядро ​​/ 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 доступными во всей структуре. Параметр collect_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, это экономит довольно много времени. Нижний фрагмент взят из

Приложение / 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

COMPILER

Все файлы компилятора могут быть найдены в includes/Just not wipe .htaccessor 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 Cache и Flush Cache Storage:


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.