Кеш 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, вместо того, чтобы снова проходить тот же процесс и снижать производительность.