Önbellekleri Temizleme ve Derleyiciyi Yönetme Doğru Yöntemi


25

Aşağıdakiler için tercih edilen bir prosedür olup olmadığını bilmek istiyorum:

  1. Magento önbelleğinin yıkanması
  2. Magento Derleyicisini Etkinleştirme / Devre Dışı Bırakma

1. Magento Önbelleğinin Temizlenmesi

Burada birkaç seçenek var:

  • Satır öğelerini kontrol etme ve Actionsaçılır kutudan yenileme göndererek
  • Flush Magento CacheDüğmesine tıklayarak ve
  • tıklandığında Flush Storage Cachedüğmesini

Bunların yapılması için tercih edilen bir düzen var mı? Magento önbelleği ile Depolama önbelleği arasındaki fark nedir?

2. Magento Derleyicisinin Etkinleştirilmesi / Devre Dışı Bırakılması

a) Derleyiciyi Etkinleştirmek

Magento derleyicisini etkinleştirmeye gelince, tüm mağaza önbellekleri etkinleştirilmiş olmalı mı? Yoksa sadece derleyiciyi etkinleştirdikten ve derleme işlemini çalıştırdıktan sonra önbellekleri mi etkinleştirmelisiniz? Derleyiciyi etkinleştirdikten sonra tüm önbellekleri yenilemeli misiniz? Ve eğer öyleyse, buna Magento önbelleğini temizleme ve depolama önbelleği dahil mi (yukarıda belirtildiği gibi)

b) Derleyiciyi Devre Dışı Bırakma

Magento derleyicisini devre dışı bırakmak söz konusu olduğunda, önce tüm önbellekleri devre dışı bırakıp ardından devre dışı bırakıldıktan sonra yeniden etkinleştirmeniz gerekir mi?

Önbellekleri açık bırakmak ve derleyiciyi devre dışı bırakmak / etkinleştirmek arasında bir fark var mı? Hangi performans etkisine sebep olur?

Herhangi bir giriş çok takdir edilecektir


Hatırlaması kolaydır. Bir üretim mağazasında önbelleği temizlemeyin. Bir geliştirme deposundaki önbelleği etkinleştirmeyin.
Ben Lessani - Sonassi

1
Üretim mağazanızdaki önbelleği temizlemek sitenin çökmesine neden oluyorsa, hazırlama sunucunuz üzerinde yeterince test yapmadınız ve bazı kötü kodlar geçtiniz, bu nedenle "Bir geliştirme mağazasında önbelleği etkinleştirmeyin". Temizleme önbelleği, Magento'nun çökmesine neden olmamalıdır. CBR hatası (Hazır olmadan önce
tamamla

Yanıtlar:


20

Magento Önbelleğini Yıkama - Bu, Magento'nun yarattığını bildiği tüm öğelerin önbelleğini (var / cache) temizler.

Önbellek Deposunu Yıkama - Orada bulunan dosyaların nasıl oluşturulduğundan bağımsız olarak, var / cache'deki her şeyi temizler.

Bu nedenle, her şeyi temizlemekte güvende olmak istiyorsanız, esas olarak var / cache değerini temizleyen " Fache Cache Storage " seçeneğini seçebilirsiniz .

Derleyici için derlemeyi etkinleştirdikten ve derleme işlemini çalıştırdıktan sonra Magento önbelleğini temizlemenizi tavsiye ederim. Bu, önbelleğin derlenmemiş verilerden temizlenmesini sağlar.

Derlemeyi devre dışı bırakırken, ilk önce onu devre dışı bırakıp, ardından Magento önbelleğini temizlerim. Bu, yine önbelleğin derlenmiş verilerden temizlenmesini sağlar.

Bir çok şeyi test etmediğiniz sürece, önbellekleri açık bırakmanızı her zaman tavsiye ederim. Derleme performans açısından isabet edebilir veya kaçırılabilir. İşleri daha hızlı hale getirdiğimi gördüm ve çoğu zaman derlemelerin işleri yavaşlattığını ve 3. parti uzantılarında sorunlara neden olduğunu gördüm. Derleme kapalıyken, sonra tekrar derleme açıkken ve Firebug / developer araçlarını kullanarak kategori sayfa yükleme süresi için bir taban çizgisi almanızı ve büyük bir fark olup olmadığını görmenizi öneririm.

PHP'de bir opcode önbellek, düzgün MySQL sorgu önbelleğe alma, css / js dosyalarını birleştirme, gzip sıkıştırmasını kullanma, bir Tam Sayfa Önbelleği uzantısı kullanarak ve dosyaların tarayıcı önbelleğe alınması gibi şeyleri kullanmak daha iyi bir olasılık olacaktır.


15

Magento önbelleği farklı değil. Temel özelliklerden yola çıkarak, önbellek seçenekleri, gezinerek görüntülenebilir.

Sistem-> Önbellek Yönetimi

arka uçta. Yapılandırmalar, layout.xml, bloklar, tam sayfa ve api dosyaları gibi, önbelleklemenin etkinleştirilip devre dışı bırakılabileceği farklı alanları görebilirsiniz. Açıkçası, site canlı olduktan sonra, bunların hepsinin etkinleştirilmesi idealdir.

Önbellek de buradan temizlenebilir veya temizlenebilir. Etiketli düğmeye basmak, “Flush Magento Cache”Magento'nun kullandığı belirli yerleşik etiket gruplarıyla eşleşen önbellek dosyalarını temizler. Bu, kesinlikle her şeyi temizlememesi nedeniyle önbelleği temizlemenin "daha güvenli" yoludur. Herhangi bir ikincil önbellek türü kullanıyorsanız, tıklamak “Flush Cache Storage”, HERŞEYİ temizlediği için önbelleğinizi temizlemenizi sağlar. Yönetici sayfasında gördüğünüz diğer iki düğme javascript ve css ile katalog resimlerini temizleyecektir.

Önbelleği temizlemenin alternatif ve biraz daha az güvenli bir yoludur

websiteroot / var / cache

ve tüm dosyaları el ile silmek. Aynı şey için de geçerli

websiteroot / var / full_page__cache

Tam sayfa önbelleği etkinse

Enterprise Edition'da bulunan tam sayfa önbelleği, sitenizi 10 kat hızlandırır, ancak önbelleğe alınan herhangi bir dinamik içeriğin farkına varmanız durumunda, biraz bilgi sahibi olmak önemlidir. Bakılacak ilginç bir dosya

websiteroot / uygulama / kod / çekirdek / Şirket / PageCache / etc / cache.xml

Burada ne FPC, önbellek adı, kap adı ve oturum ömrü tarafından önbelleğe alındığını görebilirsiniz. Bu blokların herhangi birini önbellekten düzenlemeyi veya kaldırmayı kesinlikle gerekli bulursanız, bunu PageCache modülüne bağlı bir modül oluşturarak ve buraya herhangi bir değişiklik yaparak yapabilirsiniz.

Yer tutucu etiketi FPC'ye bu bloğun dinamik olduğunu söyler. Bir sayfa yüklendiğinde, blok henüz önbellekte değilse, yer tutucu etiketlerindeki bu kimlik değeri önbellekte aranır ve mevcut değilse, bu blok çağrılır ve oluşturulur ve kimlik bilgisi eklenir. önbellek.

Magento'nun derleme özelliği altında bulunabilir

Sistem> Araçlar> Derleme

Yeni bir yükleme çalıştırıyorsanız, muhtemelen her iki includes and includes/src/dizinin de yazılabilir olması gereken bir sistem mesajı alırsınız . Bu yapıldığında, 'Derlemeyi Çalıştır' düğmesine basabiliriz ve temelde siz yapılır, Magento çekirdeği derlemeyi kullanıyor.

Magento kaynak kodunu derlediğinde, çerçeve birkaç şey yapar. Ya Admin yoluyla tetiklenen veya olmak shell, see shell/compiler.php, derleme tüm tek sınıfı tarafından yapılır: Mage_Compiler_Model_Process. Bu sınıf içinde, aslında tüm sürecin kuş bakışı olan aşağıdaki pasajı bulacaksınız.

/**
     * Run compilation process
     *
     * @return Mage_Compiler_Model_Process
     */
    public function run()
    {
        $this->_collectFiles();
        $this->_compileFiles();
        $this->registerIncludePath();
        return $this;
    }

$this->_collectFiles();Arama tarafından başlatılan Magento, tüm PHP dosyalarını her ikisinden de kopyalar.

Uygulamanın / kod

ve lib dizinleri

/ / Src içerir

dizin. Aşağıdaki kod parçasında görebileceğiniz gibi: bu işlem sırasında Magento tekrar tekrar tüm dosyaları ve dizinleri yineler. Bu yollar sonunda dosya adı olarak kullanılır. Özyinelemeli işlem bir dosyaya ulaştığında, bir PHP uzantısı olup olmadığını kontrol eder ve bulunduğunda dosya derleyici dizinine kopyalanır. Diğer dosya türlerine dokunulmaz.

Örnek olarak: Mage_Catalog_Model_Category sınıfının yolu:

Uygulama / kod / çekirdek / Mage / Katalog / Modeli / category.php

ancak derleme etkinken şimdi

/ Src / Mage_Catalog_Model_Category.php içerir

/**
     * 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;
    }

Kontrolörler başka bir tedavi görüyor. Tüm kontrolör dizinleri kopyalanır.

/ Src / içermektedir

ancak ilgili ad alanının adını taşıyan bir dizinde saklanır, düşünün: Mage, Enterprise veya kendi verilen ad alanınız.

Bu isim alanı dizinleri içerisinde kontrolörler modül başına saklanır ve kontrol cihazı dizin yapısına dokunulmaz. Aynı dosya adı için de geçerli, sadece tam bir kopyası. Bütün bu mantık aşağıdaki yöntemde bulunabilir$this->_copyControllers($path);

Bu ikinci derleme seviyesi tüm kapsamları ve sınıf listelerini yöneticiden toplar. Tüm bu kapsamlar, ilgili sınıf dosyalarının içeriği getirilerek işlenir ve verilen kapsamdan sonra adlandırılan tek bir dosyaya yazılır.

/**
     * 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;
    }

Varsayılan olarak Magento dört farklı kapsam dosyası oluşturur:

__default.php, __catalog.php, __checkout.php ve __cms.php

Bu kapsam dosyalarının oluşturulması sürecinde, Magento otomatik olarak tüm sınıf genişletmelerini ve kapsam listesinde verilen sınıflar tarafından kullanılan arayüzleri ayrıştırır.

Tüm dosyalar yerinde ve derlenmiş durumdayken, Magento derleme özelliğini kullanım için etkinleştirmeye hazırdır.

Son fakat en az değil, derleme ile ilgili yapılandırma ayarlanır. Bu dosya includes/config.phpaşağıdaki iki sabitte bulunabilir ve tutar. Derlenmeyi etkinleştirdikten sonra COMPILER_INCLUDE_PATH ile ilgili satır açık ve bu nedenle harekete hazırdır.

> #define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');
> #define('COMPILER_COLLECT_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'stat');

Konfigürasyon dosyasını ayarlamaktan sorumlu olan kodun registerIncludePath yönteminde bulunabilir Mage_Compiler_Model_Process class.

Önyükleme sırasında derleme yapılandırma dosyası içinde bulunur index.php file (around line 44). Bu, include_path sabitlerinin tüm çerçevede kullanılabilir olmasını sağlar. Collect_path, derlenmiş dosyalarınızın kullanımı hakkında daha fazla istatistik bilgisi almak için yalnızca el ile etkinleştirebileceğiniz bir şeydir. Bu canlı olarak etkinleştirilmemelidir.

/**
 * Compilation includes configuration file
 */
$compilerConfig = 'includes/config.php';
if (file_exists($compilerConfig)) {
    include $compilerConfig;
}

Magento'daki bu noktadan itibaren derleme modunun aşağıdaki ifadeyle etkinleştirilip etkinleştirilmediğini kontrol eder. Kod tabanından geçerek ('grep' kullanarak) bu mantığın çoğunun lib/Varien/Autoload.phpdosyada bulunduğunu fark edeceksiniz .

if (defined('COMPILER_COLLECT_PATH')) {
            // do stuff
        }

Aramak için diğer yer Mage_Core_Controller_Varien_Action. Bu sınıfta preDispatch(), yöntem gerçekten gönderilmeden önce her denetleyici eylem yöntemi için tetiklenen yöntemi bulacaksınız . Kaynağın bu bölümünde Magento'nun otomatik yükleyici sınıfı Varien_Autoload belirli bir derleme kapsamı dosyasını yüklemek için çağrılıyor.

 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)
        );

Derleme modunda çalışırken, Magento'da yalnızca tek bir içerme yolu, includes/src/dizin vardır, bu nedenle her dosya doğrudan ilk denemede bulunur. Magento'nun sahip olduğu önemli miktarda dosya ile bu biraz zaman kazandırır. Alt snippet'in alındığı

Uygulamanın / 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 bir dosya içerdiğinde, içerik opcode'a derlenir. Bu, bir dosyanın her eklenişinde yapılması gereken bir işlemdir. Dükkanınızın performansını daha da artırmak için APC'yi sunucunuza yükleyebilirsiniz. APC, dosyaların kodlanmış sürümlerini önbelleğe alır ve sonraki istekler için kullanılabilir hale getirir. Dolayısıyla bir sonraki istek üzerine: aynı işlemi tekrar yapmak ve performansınızı boşaltmak yerine, dosya APC önbelleğinden okunacaktır.


3

DERLEYİCİ

Tüm derleyici dosyaları includes/Sadece silme .htaccessveya içinde bulunabilir config.php. Görüntülüyorsanız config.php, derleyicinin tüm etkinleştirme / devre dışı bırakma işlemlerinin yaptığı açıklamaların #ikisinden önce kaldırıldığını göreceksiniz define. rm -Rf includes/src;rm -Rf includes/statMagento kökünden derlenmiş verileri silecek bir basit olduğunu varsaymak güvenlidir .

Ayrıca, AOE_ClassPathCache'i APC ile birlikte kullanmayı düşünün , çünkü bu derleyiciyi denklemden çıkarmak için yeterince yeterli olacaktır.

Ayrıca konuyla ilgili daha fazla tartışma için:


önbellekler

Bu tamamen sizin kullandığınız önbellek arka uçlarında tanımlanmıştır local.xml. Varsayılan filesönbellek işleyicisini kullanıyorsanız, silme var/cacheve eğer Enterprise var/full_page_cache. Memcache gibi bir veri deposunu kullanıyorsanız, bunu Magento'lar Flush Cache Storagearacılığıyla veya önbellek veri deposunun önbelleğini temizlemek / silmek için bir yöntemle yapmanız gerekir .

Ayrıca olası veri depoları hakkında daha fazla ayrıntı olan Magento , Önbellekleme mekanizmaları için Zend_Cache kullanır . Hangi ilişki fark edeceksiniz local.xmlönbellek XPath'lerdeki.


NOT

Enterprise kullanıyorsanız, ikinci bir yapılandırma dosyasını etc/enterprise.xmlFPC veri deposunun tanımlandığı yerdir.

Flush Cache ve Flush Cache Storage arasındaki fark nedir?


0

Magento Derleyici hakkında çok önemli bir not. Derleme yaparken APC'de bulunanları kapatmanız gerekir, çünkü derleyici APC'de bulunanları derleyemez ve derlemenizi bozabilir. Benim için bu, APC'yi sunucudan boşaltmak ve ardından Apache'yi (httpd) yeniden başlatmak anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.