Richtige Methode zum Leeren von Caches und Verwalten des Compilers

25

Ich würde gerne wissen, ob es ein bevorzugtes Verfahren für Folgendes gibt:

  1. Leeren des Magento-Cache
  2. Aktivieren / Deaktivieren des Magento Compilers

1. Leeren des Magento Cache

Hier gibt es einige Möglichkeiten, nämlich:

  • Überprüfen Sie die ActionsWerbebuchungen und senden Sie die Aktualisierung über das Dropdown-Feld
  • Klicken Sie auf die Flush Magento CacheSchaltfläche und
  • Klicken Sie auf die Flush Storage CacheSchaltfläche

Gibt es eine bevorzugte Reihenfolge, in der diese ausgeführt werden sollen? Was ist der Unterschied zwischen dem Magento-Cache und dem Speicher-Cache?

2. Aktivieren / Deaktivieren des Magento Compilers

a) Aktivieren des Compilers

Müssen beim Aktivieren des Magento-Compilers alle Store-Caches aktiviert sein? Oder sollten Sie die Caches erst aktivieren, nachdem Sie den Compiler aktiviert und den Kompilierungsprozess ausgeführt haben? Wenn Sie den Compiler aktiviert haben, sollten Sie alle Caches aktualisieren? Und wenn ja, schließt dies das Leeren des Magento-Cache und des Speicher-Cache ein (wie oben erwähnt)

b) Deaktivieren Sie den Compiler

Sollten Sie beim Deaktivieren des Magento-Compilers zuerst alle Caches deaktivieren und nach dem Deaktivieren wieder aktivieren?

Gibt es einen Unterschied zwischen dem Belassen der Caches und dem Deaktivieren / Aktivieren des Compilers? Welche Auswirkungen auf die Leistung hat dies?

Jede Eingabe wäre sehr dankbar

Elch
quelle
Es ist leicht zu merken. Leeren Sie den Cache nicht in einem Produktionsgeschäft. Aktivieren Sie den Cache nicht in einem Entwicklungsspeicher.
Ben Lessani - Sonassi
1
Und wenn das Leeren des Caches in Ihrem Produktionsspeicher zum Absturz der Site führt, haben Sie nicht genug Tests auf Ihrem Staging-Server durchgeführt, und es ist ein fehlerhafter Code durchgekommen. Das Leeren des Caches sollte Magento niemals zum Absturz bringen. CBR-Fehler (Festschreiben vor Fertigstellung)
Fiasco Labs

Antworten:

20

Magento-Cache leeren - Löscht den Cache (var / cache) aller Objekte, von denen Magento weiß, dass sie erstellt wurden.

Cache leeren - Löscht alles in var / cache, unabhängig davon, wie diese Dateien dort erstellt wurden.

Wenn Sie also sicher sein möchten, dass Sie alles löschen, können Sie " Cache-Speicher leeren " auswählen, wodurch var / cache im Wesentlichen gelöscht wird.

Für den Compiler würde ich empfehlen, den Magento-Cache nach dem Aktivieren der Kompilierung und dem Ausführen des Kompilierungsprozesses zu leeren. Dies stellt sicher, dass der Cache von nicht kompilierten Daten gelöscht wird.

Wenn ich die Kompilierung deaktiviere, würde ich sie zuerst deaktivieren und anschließend den Magento-Cache leeren. Dies stellt wiederum sicher, dass der Cache frei von kompilierten Daten ist.

Sofern Sie nicht viel testen, würde ich immer empfehlen, die Caches eingeschaltet zu lassen. Die Kompilierung kann in Bezug auf die Leistung fehlerhaft sein. Ich habe gesehen, dass es die Dinge schneller macht, und oft gesehen, wie Kompilierungen die Dinge langsamer machen und Probleme mit Erweiterungen von Drittanbietern verursachen. Ich würde empfehlen, eine Baseline für die Ladezeit einer Kategorieseite (mithilfe von Firebug- / Entwicklertools) zu erstellen, bei der die Kompilierung deaktiviert und bei der Kompilierung wieder aktiviert ist, und zu prüfen, ob ein großer Unterschied besteht.

Sie sind wahrscheinlich besser dran, wenn Sie in PHP einen Opcode-Cache verwenden, MySQL-Abfragen zwischenspeichern, CSS- / JS-Dateien kombinieren, die GZIP-Komprimierung verwenden, eine Ganzseiten-Cache-Erweiterung verwenden und die richtigen Einstellungen für das Browser-Caching von Dateien vornehmen.

Rob Mangiafico
quelle
15

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.phpwird 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.phpund 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.phpDatei 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.

TBI Infotech
quelle
3

COMPILER

Alle Compiler-Dateien finden Sie in includes/Nur nicht wischen .htaccessoder config.php. Wenn Sie anzeigen, werden config.phpSie feststellen, dass beim Aktivieren / Deaktivieren des Compilers nur die Kommentare #vor den beiden entfernt werden define. Es ist sicher anzunehmen, dass ein einfacher rm -Rf includes/src;rm -Rf includes/statBefehl aus dem Magento-Stammverzeichnis die kompilierten Daten löscht.

Ziehen Sie auch in Betracht, AOE_ClassPathCache zusammen mit APC zu verwenden, da dies bei weitem ausreicht, um den Compiler aus der Gleichung zu entfernen.

Auch für mehr Diskussion zum Thema:


CACHES

Dies wird nur für die Caching-Backends definiert, die Sie über Ihr verwenden local.xml. Wenn Sie den Standard- filesCache-Handler verwenden, löschen Sie var/cacheund wenn Enterprise var/full_page_cache. Wenn Sie einen Datenspeicher wie Memcache verwenden, müssen Sie dies entweder über Magento Flush Cache Storageoder über eine Methode tun , mit der der Cache-Datenspeicher seinen Cache leeren / löschen muss.

Außerdem verwendet Magento mehr Details über die möglichen Datenspeicher Zend_Cache für seine Caching-Mechanismen. Was Sie bemerken werden, bezieht sich auf die local.xmlCache-Xpaths.


HINWEIS

Wenn Sie Enterprise etc/enterprise.xmlausführen , finden Sie eine zweite Konfigurationsdatei, in der der Datenspeicher für die FPC definiert ist.

Was ist der Unterschied zwischen Cache leeren und Cache leeren:

B00MER
quelle
0

Ein sehr wichtiger Hinweis zum Magento Compiler. Sie müssen Dinge wie APC deaktivieren, wenn Sie eine Kompilierung durchführen, da der Compiler nicht kompilieren kann, was sich in APC befindet, und Ihre Kompilierung beschädigt. Für mich würde das bedeuten, APC auf dem Server zu entladen und dann Apache (httpd) neu zu starten.

user3317382
quelle