Кеш 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, замість того, щоб повторно пройти той же процес і виправити вашу ефективність.