Magento-Cache ist nicht anders. Beginnen Sie mit den Grundlagen, um die Cache-Optionen anzuzeigen, indem Sie zu navigieren
System-> Cache-Verwaltung
im Backend. Sie können die verschiedenen Bereiche der Zwischenspeicherung anzeigen, die aktiviert / deaktiviert werden können, z. B. Konfigurationen, layout.xml, Blöcke, vollständige Seiten und API-Dateien. Offensichtlich ist es das Ideal, all diese zu aktivieren, sobald die Site live ist.
Der Cache kann auch von hier aus geleert oder geleert werden. Wenn Sie auf die Schaltfläche mit der Bezeichnung “Flush Magento Cache”
klicken, werden alle Cache-Dateien geleert, die mit einem bestimmten Satz integrierter Standard-Tags übereinstimmen, die Magento verwendet. Dies ist der "sicherere" Weg, den Cache zu leeren, da nicht alles gelöscht wird. Wenn Sie einen sekundären Cache-Typ verwenden, wird durch Klicken “Flush Cache Storage”
auf sichergestellt, dass Sie den Cache geleert haben, da ALLES gelöscht wird. Die anderen beiden Schaltflächen, die Sie auf der Admin-Seite sehen, löschen Javascript, CSS und Katalogbilder.
Eine alternative und etwas weniger sichere Methode zum Löschen des Caches ist das Navigieren zu
websiteroot / var / cache
und manuelles Löschen aller Dateien. Gleiches gilt für
websiteroot / var / full_page__cache
Wenn Sie den vollständigen Seiten-Cache aktiviert haben.
Der vollständige Seiten-Cache, der in der Enterprise Edition verfügbar ist, beschleunigt Ihre Website um das Zehnfache. Es ist jedoch wichtig, ein wenig darüber zu wissen, falls Sie feststellen, dass dynamischer Inhalt zwischengespeichert wird. Eine interessante Datei zum Anschauen ist
websiteroot / app / code / core / Enterprise / PageCache / etc / cache.xml
Hier können Sie sehen, was von der FPC zwischengespeichert wird, den Blocknamen, den Containernamen und die Sitzungslebensdauer. Wenn Sie einen dieser Blöcke unbedingt bearbeiten oder aus dem Cache entfernen müssen, können Sie ein vom PageCache-Modul abhängiges Modul erstellen und Änderungen daran vornehmen.
Das Platzhalter-Tag teilt der FPC mit, dass dieser Block als dynamisch angesehen wird. Wenn eine Seite geladen wird und sich der Block noch nicht im Cache befindet, wird nach diesem ID-Wert in den Platzhalter-Tags im Cache gesucht. Wenn er nicht vorhanden ist, wird dieser Block aufgerufen und generiert und die ID hinzugefügt der Cache.
Die Zusammenstellungsfunktion von Magento finden Sie unter
System> Tools> Zusammenstellung
Wenn Sie eine Neuinstallation ausführen, erhalten Sie wahrscheinlich eine Systemmeldung, dass beide includes and includes/src/
Verzeichnisse beschreibbar gemacht werden müssen. Wenn dies erledigt ist, können wir auf die Schaltfläche 'Kompilierungsprozess ausführen' klicken und Sie sind im Grunde genommen fertig, der Magento-Kern verwendet die Kompilierung.
Wenn Magento seinen Quellcode kompiliert, macht das Framework ein paar Dinge. Entweder über das Admin ausgelöst wird , oder shell, see shell/compiler.php
wird die gesamte Compilierung von einer einzigen Klasse getan: Mage_Compiler_Model_Process
. In dieser Klasse finden Sie den folgenden Ausschnitt, der den gesamten Prozess aus der Vogelperspektive zeigt.
/**
* Run compilation process
*
* @return Mage_Compiler_Model_Process
*/
public function run()
{
$this->_collectFiles();
$this->_compileFiles();
$this->registerIncludePath();
return $this;
}
Durch den $this->_collectFiles();
Aufruf gestartet, kopiert Magento alle PHP-Dateien von beiden
App / Code
und lib verzeichnisse zum
/ enthält / src
Verzeichnis. Wie Sie im folgenden Snippet sehen können: Während dieses Vorgangs durchläuft Magento rekursiv alle Dateien und Verzeichnisse. Diese Pfade werden schließlich als Dateiname verwendet. Wenn der rekursive Prozess auf eine Datei stößt, wird nach einer PHP-Erweiterung gesucht, und die gefundene Datei wird in das Compilerverzeichnis kopiert. Andere Dateitypen bleiben unberührt.
Als Beispiel: Der Pfad für die Klasse Mage_Catalog_Model_Category war
app / code / core / Mage / Catalog / Model / Category.php
aber mit aktivierter Kompilierung ist es jetzt geworden
enthält / 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;
}
Controller erhalten eine andere Behandlung. Alle Controller-Verzeichnisse werden in kopiert
enthält / src /
Sie befinden sich jedoch in einem Verzeichnis mit dem Namen des zugehörigen Namespaces. Denken Sie beispielsweise an Mage, Enterprise oder Ihren eigenen Namespace.
Innerhalb dieser Namespace-Verzeichnisse werden die Controller pro Modul gespeichert und die Controller-Verzeichnisstruktur bleibt unberührt. Das gleiche gilt für den Dateinamen, es ist nur eine exakte Kopie. All diese Logik kann in der folgenden Methode gefunden werden$this->_copyControllers($path);
Diese zweite Kompilierungsebene sammelt alle Bereiche und ihre jeweiligen Klassenlisten vom Administrator. Alle diese Bereiche werden verarbeitet, indem der Inhalt der zugehörigen Klassendateien abgerufen und in eine einzelne Datei geschrieben wird, die nach dem angegebenen Bereich benannt ist.
/**
* 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;
}
Standardmäßig erstellt Magento vier verschiedene Scope-Dateien:
__default.php, __catalog.php, __checkout.php und __cms.php
Während des Erstellens dieser Scope-Dateien analysiert Magento automatisch alle Klassenerweiterungen und Schnittstellen, die von den in der Scope-Liste angegebenen Klassen verwendet werden.
Nachdem alle Dateien vorhanden und kompiliert sind, ist Magento bereit, die Kompilierungsfunktion für die Verwendung zu aktivieren.
Last but not least wird die Konfiguration bezüglich der Kompilierung angepasst. Diese Datei befindet sich unter includes/config.php
und enthält die folgenden beiden Konstanten. Nach dem Aktivieren der Kompilierung ist die Zeile bezüglich COMPILER_INCLUDE_PATH nicht kommentiert und somit einsatzbereit.
> #define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');
> #define('COMPILER_COLLECT_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'stat');
Den Code, der für die Anpassung der Konfigurationsdatei verantwortlich ist, finden Sie in der Methode registerIncludePath der Mage_Compiler_Model_Process class
.
Während des Bootstraps befindet sich die Kompilierungskonfigurationsdatei in der index.php file (around line 44)
. Dadurch stehen die include_path-Konstanten im gesamten Framework zur Verfügung. Den collect_path können Sie nur manuell aktivieren, um mehr statistische Informationen über die Verwendung Ihrer kompilierten Dateien zu erhalten. Dies sollte nicht live aktiviert werden.
/**
* Compilation includes configuration file
*/
$compilerConfig = 'includes/config.php';
if (file_exists($compilerConfig)) {
include $compilerConfig;
}
Ab diesem Zeitpunkt prüft Magento mit der folgenden Anweisung, ob der Kompilierungsmodus aktiviert ist. Wenn Sie die Codebasis durchgehen (mit 'grep'), werden Sie feststellen, dass der größte Teil dieser Logik in der lib/Varien/Autoload.php
Datei enthalten ist.
if (defined('COMPILER_COLLECT_PATH')) {
// do stuff
}
Der andere Ort zu suchen ist der Mage_Core_Controller_Varien_Action
. In dieser Klasse finden Sie die preDispatch()
Methode, die für jede Controller-Aktionsmethode ausgelöst wird, bevor die Methode tatsächlich ausgelöst wird. In diesem Teil der Quelle wird die Autoloader-Klasse Varien_Autoload von Magento aufgerufen, um eine bestimmte Compilation-Scope-Datei zu laden.
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)
);
Im Kompilierungsmodus hat Magento nur einen einzigen Include-Pfad, das includes/src/
Verzeichnis, sodass jede Datei direkt beim ersten Versuch gefunden wird. Durch die große Anzahl von Dateien, die Magento zur Verfügung hat, wird viel Zeit gespart. Das darunterliegende Snippet stammt aus dem
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";
}
Wenn PHP eine Datei enthält, wird der Inhalt zu Opcode kompiliert. Dies ist ein Vorgang, der jedes Mal ausgeführt werden muss, wenn eine Datei enthalten ist. Um die Leistung Ihres Shops weiter zu verbessern, können Sie APC auf Ihrem Server installieren. APC speichert die opcodierten Versionen der Dateien im Cache und stellt sie für spätere Anforderungen zur Verfügung. Bei der nächsten Anforderung wird die Datei also aus dem APC-Cache gelesen, anstatt denselben Vorgang erneut durchführen zu müssen und Ihre Leistung zu beeinträchtigen.