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.php
aş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.php
dosyada 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.