Le cache Magento n'est pas différent. En commençant par les bases, les options de cache peuvent être affichées en accédant à
Système-> Gestion du cache
dans le backend. Vous pouvez voir les différents domaines de mise en cache qui peuvent être activés / désactivés, tels que les configurations, les fichiers layout.xml, les blocs, la page entière et les fichiers api. De toute évidence, l'idéal est d'activer tous ces éléments une fois le site en ligne.
Le cache peut également être vidé ou vidé à partir d'ici. Appuyez sur le bouton étiqueté “Flush Magento Cache”
pour vider tous les fichiers de cache qui correspondent à un certain ensemble de balises par défaut intégrées que Magento utilise. Il s'agit de la méthode «plus sûre» pour vider le cache, car elle n'efface pas absolument tout. Si vous utilisez un type de cache secondaire, cliquez sur “Flush Cache Storage”
pour vous assurer que vous avez vidé votre cache, car il efface TOUT. Les deux autres boutons que vous voyez sur la page d'administration effaceront les images javascript et css et les images de catalogue.
Un moyen alternatif et légèrement moins sûr de vider le cache consiste à accéder à
websiteroot / var / cache
et supprimer manuellement tous les fichiers. De même pour
websiteroot / var / full_page__cache
si le cache pleine page est activé.
Le cache pleine page, disponible sur l'édition Enterprise, accélère votre site de 10 fois, mais il est important d'en savoir un peu plus à ce sujet, au cas où vous remarqueriez un contenu dynamique mis en cache. Un fichier intéressant à regarder est
websiteroot / app / code / core / Enterprise / PageCache / etc / cache.xml
Ici, vous pouvez voir ce qui est mis en cache par FPC, le nom du bloc, le nom du conteneur et la durée de vie de la session. Si vous trouvez qu'il est absolument nécessaire de modifier ou de supprimer l'un de ces blocs du cache, vous pouvez le faire en créant un module dépendant du module PageCache et en y plaçant toutes les modifications.
La balise d'espace réservé indique au FPC que ce bloc est considéré comme dynamique. Lorsqu'une page est chargée, si le bloc n'est pas encore dans le cache, cette valeur d'ID dans les balises d'espace réservé est recherchée dans le cache, et si elle n'existe pas, ce bloc est appelé et généré, et l'ID est ajouté à le cache.
La fonction de compilation de Magento se trouve sous
Système> Outils> Compilation
Si vous exécutez une nouvelle installation, vous obtenez probablement un message système indiquant que les deux includes and includes/src/
répertoires doivent être rendus accessibles en écriture. Lorsque cela est fait, nous pouvons appuyer sur le bouton `` Exécuter le processus de compilation '' et vous avez pratiquement terminé, le cœur de Magento utilise la compilation.
Lorsque Magento compile son code source, le framework fait quelques choses. Étant soit déclenchée par l'administrateur ou shell, see shell/compiler.php
, toute la compilation se fait par une seule classe: Mage_Compiler_Model_Process
. Dans cette classe, vous trouverez l'extrait suivant qui est en fait une vue à vol d'oiseau de l'ensemble du processus.
/**
* Run compilation process
*
* @return Mage_Compiler_Model_Process
*/
public function run()
{
$this->_collectFiles();
$this->_compileFiles();
$this->registerIncludePath();
return $this;
}
Lancé par l' $this->_collectFiles();
appel, Magento copie tous les fichiers PHP des deux
app / code
et les répertoires lib au
/ inclut / src
annuaire. Comme vous pouvez le voir dans l'extrait ci-dessous: pendant ce processus, Magento parcourt récursivement tous les fichiers et répertoires. Ces chemins sont finalement utilisés comme nom de fichier. Lorsque le processus récursif frappe un fichier, il recherche une extension PHP et, lorsqu'il est trouvé, le fichier est copié dans le répertoire du compilateur. Les autres types de fichiers ne sont pas modifiés.
A titre d'exemple: le chemin de la classe Mage_Catalog_Model_Category était
app / code / core / Mage / Catalogue / Model / Category.php
mais, avec la compilation activée, est devenu
inclut / 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;
}
Les contrôleurs reçoivent un autre traitement. Tous les répertoires du contrôleur sont copiés dans
comprend / src /
mais sont stockés dans un répertoire qui porte le nom de son espace de noms associé, pensez: Mage, Enterprise ou votre propre espace de noms donné.
Dans ces répertoires d'espace de noms, les contrôleurs sont stockés par module et la structure du répertoire des contrôleurs reste intacte. Il en va de même pour le nom de fichier, c'est juste une copie exacte. Toute cette logique se retrouve dans la méthode suivante$this->_copyControllers($path);
Ce deuxième niveau de compilation recueille toutes les étendues et leurs listes de classes respectives auprès de l'administrateur. Toutes ces étendues sont en cours de traitement en récupérant le contenu des fichiers de classe associés et en les écrivant dans un seul fichier nommé d'après l'étendue donnée.
/**
* 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;
}
Par défaut, Magento crée quatre fichiers de portée différents:
__default.php, __catalog.php, __checkout.php et __cms.php
Pendant le processus de construction de ces fichiers de portée, Magento analyse automatiquement toutes les extensions de classe et les interfaces qui sont utilisées par les classes fournies dans la liste de portée.
Avec tous les fichiers en place et compilés, Magento est prêt à activer la fonction de compilation pour une utilisation.
Enfin, la configuration liée à la compilation est ajustée. Ce fichier se trouve sur includes/config.php
et contient les deux constantes suivantes. Lors de l'activation de la compilation, la ligne concernant COMPILER_INCLUDE_PATH n'est pas commentée et est donc prête à l'action.
> #define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');
> #define('COMPILER_COLLECT_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'stat');
Le code responsable de l'ajustement du fichier de configuration se trouve dans la méthode registerIncludePath du Mage_Compiler_Model_Process class
.
Pendant le bootstrap, le fichier de configuration de la compilation est inclus dans le index.php file (around line 44)
. Cela rend les constantes include_path disponibles dans tout le framework. Le collect_path est quelque chose que vous ne pouvez activer que manuellement pour obtenir plus d'informations statistiques sur l'utilisation de vos fichiers compilés. Cela ne devrait pas être activé en direct.
/**
* Compilation includes configuration file
*/
$compilerConfig = 'includes/config.php';
if (file_exists($compilerConfig)) {
include $compilerConfig;
}
À partir de ce moment, Magento vérifiera si le mode de compilation est activé avec l'instruction suivante. En parcourant la base de code (en utilisant 'grep'), vous remarquerez que la majeure partie de cette logique se trouve dans le lib/Varien/Autoload.php
fichier.
if (defined('COMPILER_COLLECT_PATH')) {
// do stuff
}
L'autre endroit à rechercher est le Mage_Core_Controller_Varien_Action
. Dans cette classe, vous trouverez la preDispatch()
méthode, qui est déclenchée pour chaque méthode d'action de contrôleur avant que la méthode ne soit réellement envoyée. Dans cette partie de la classe du chargeur automatique de Magento source, Varien_Autoload est appelé pour charger un fichier d'étendue de compilation spécifique.
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)
);
Lors de l'exécution en mode de compilation, Magento n'a qu'un seul chemin d'inclusion, le includes/src/
répertoire, donc chaque fichier est trouvé directement au premier essai. Avec la quantité considérable de fichiers de Magento, cela fait gagner un peu de temps. L'extrait en dessous est tiré de la
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";
}
Lorsque PHP inclut un fichier, le contenu est compilé en opcode. Il s'agit d'un processus qui doit être effectué chaque fois qu'un fichier est inclus. Pour améliorer encore les performances de votre boutique, vous pouvez installer APC sur votre serveur. APC met en cache les versions opcodées des fichiers, les rendant disponibles pour les requêtes suivantes. Donc, à la prochaine demande: le fichier sera lu à partir du cache APC, au lieu de devoir recommencer le même processus et de drainer vos performances.