Cache Magento tidak berbeda. Dimulai dengan dasar-dasar, opsi cache dapat dilihat dengan menavigasi ke
Sistem-> Manajemen Cache
di backend. Anda dapat melihat berbagai bidang caching yang dapat diaktifkan / dinonaktifkan, seperti konfigurasi, layout.xml, blok, halaman penuh, dan file api. Jelas yang ideal adalah mengaktifkan semua ini setelah situs aktif.
Cache juga dapat dihapus, atau dibuang, dari sini. Menekan tombol yang berlabel “Flush Magento Cache”
akan menyiram semua file cache yang cocok dengan satu set tag bawaan bawaan yang digunakan Magento. Ini adalah cara "lebih aman" untuk menghapus cache, karena tidak menghapus semuanya. Jika Anda menggunakan jenis cache sekunder apa pun, maka mengklik “Flush Cache Storage”
akan memastikan Anda telah membersihkan cache Anda, karena menghapus SEMUA. Dua tombol lainnya yang Anda lihat di halaman admin akan menghapus javascript dan css, dan katalog gambar.
Cara alternatif, dan sedikit kurang aman untuk menghapus cache adalah dengan menavigasi ke
websiteroot / var / cache
dan menghapus semua file secara manual. Sama berlaku untuk
websiteroot / var / full_page__cache
jika Anda memiliki cache halaman penuh diaktifkan.
Tembolok halaman penuh, tersedia pada Edisi Perusahaan, mempercepat situs Anda hingga 10 kali lipat, tetapi penting untuk mengetahui sedikit tentang itu, kalau-kalau Anda melihat ada konten dinamis yang di-cache. File yang menarik untuk dilihat adalah
websiteroot / app / code / core / Enterprise / PageCache / etc / cache.xml
Di sini Anda dapat melihat apa yang sedang di-cache oleh FPC, nama blok, nama wadah, dan masa sesi. Jika Anda merasa perlu untuk mengedit atau menghapus blok-blok ini dari cache, Anda dapat melakukannya dengan membuat modul yang bergantung pada modul PageCache, dan menempatkan modifikasi apa pun di sana.
Tag placeholder memberi tahu FPC bahwa blok itu dianggap dinamis. Ketika sebuah halaman dimuat, jika blok belum di cache nilai ID ini di tag placeholder dicari dalam cache, dan jika itu tidak ada, maka blok itu dipanggil dan dihasilkan, dan ID ditambahkan ke cache.
Fitur kompilasi Magento dapat ditemukan di bawah
Sistem> Alat> Kompilasi
Jika Anda menjalankan instalasi baru, Anda mungkin mendapatkan pesan sistem bahwa kedua includes and includes/src/
direktori harus dibuat dapat ditulis. Ketika ini selesai, kita bisa menekan tombol 'Jalankan proses Kompilasi' dan pada dasarnya Anda sudah selesai, inti Magento menggunakan kompilasi.
Ketika Magento mengkompilasi kode sumbernya, kerangka kerja melakukan beberapa hal. Yang baik dipicu melalui admin atau shell, see shell/compiler.php
, semua kompilasi dilakukan oleh satu kelas: Mage_Compiler_Model_Process
. Dalam kelas ini Anda akan menemukan cuplikan berikut yang sebenarnya merupakan pandangan mata burung dari keseluruhan proses.
/**
* Run compilation process
*
* @return Mage_Compiler_Model_Process
*/
public function run()
{
$this->_collectFiles();
$this->_compileFiles();
$this->registerIncludePath();
return $this;
}
Dihubungi oleh $this->_collectFiles();
panggilan itu, Magento menyalin semua file PHP dari keduanya
aplikasi / kode
dan direktori lib ke
/ include / src
direktori. Seperti yang dapat Anda lihat dalam cuplikan di bawah ini: selama proses ini Magento secara berulang mengulangi semua file dan direktori. Path ini akhirnya digunakan sebagai nama file. Ketika proses rekursif mengenai file, ia akan memeriksa ekstensi PHP dan, ketika ditemukan, file tersebut disalin ke direktori kompiler. Jenis file lainnya tidak tersentuh.
Sebagai contoh: jalur untuk kelas Mage_Catalog_Model_Category tadinya
app / code / core / Mage / Katalog / Model / Category.php
tetapi, dengan kompilasi diaktifkan, kini telah menjadi
termasuk / 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;
}
Pengendali mendapatkan perawatan lain. Semua direktori pengontrol disalin ke
termasuk / src /
tetapi disimpan dalam direktori yang memiliki nama namespace terkait, pikirkan: Mage, Enterprise atau namespace Anda sendiri.
Dalam direktori namespace ini, pengontrol disimpan per modul dan struktur direktori pengontrol tidak tersentuh. Hal yang sama berlaku untuk nama file, itu hanya salinan yang tepat. Semua logika ini dapat ditemukan dalam metode berikut$this->_copyControllers($path);
Kompilasi tingkat kedua ini mengumpulkan semua cakupan dan daftar kelasnya masing-masing dari admin. Semua cakupan ini sedang diproses dengan mengambil konten dari file kelas terkait dan menuliskannya ke dalam satu file bernama setelah lingkup yang diberikan.
/**
* 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;
}
Secara default Magento membuat empat file cakupan yang berbeda:
__default.php, __catalog.php, __checkout.php dan __cms.php
Selama proses membangun file lingkup ini, Magento secara otomatis mem-parsing semua ekstensi kelas dan antarmuka yang digunakan oleh kelas-kelas yang disediakan dalam daftar lingkup.
Dengan semua file di tempat dan dikompilasi, Magento siap untuk mengaktifkan fitur kompilasi untuk digunakan.
Terakhir namun tidak kalah penting konfigurasi yang terkait dengan kompilasi disesuaikan. File ini dapat ditemukan di includes/config.php
dan memegang dua konstanta berikut. Setelah mengaktifkan kompilasi, baris yang terkait dengan COMPILER_INCLUDE_PATH tidak dikomando dan siap untuk ditindaklanjuti.
> #define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');
> #define('COMPILER_COLLECT_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'stat');
Kode yang bertanggung jawab untuk menyesuaikan file konfigurasi dapat ditemukan dalam metode registerIncludePath dari Mage_Compiler_Model_Process class
.
Selama bootstrap file konfigurasi kompilasi disertakan dalam file index.php file (around line 44)
. Ini membuat konstanta include_path tersedia di seluruh kerangka kerja. Collect_path adalah sesuatu yang hanya dapat Anda aktifkan secara manual untuk mendapatkan lebih banyak informasi statistik tentang penggunaan file yang Anda kompilasi. Ini seharusnya tidak diaktifkan secara langsung.
/**
* Compilation includes configuration file
*/
$compilerConfig = 'includes/config.php';
if (file_exists($compilerConfig)) {
include $compilerConfig;
}
Dari titik ini, Magento akan memeriksa apakah mode kompilasi diaktifkan dengan pernyataan berikut. Melalui basis kode (menggunakan 'grep'), Anda akan melihat bahwa sebagian besar logika ini dapat ditemukan dalam lib/Varien/Autoload.php
file.
if (defined('COMPILER_COLLECT_PATH')) {
// do stuff
}
Tempat lain untuk mencari adalah Mage_Core_Controller_Varien_Action
. Di kelas ini Anda akan menemukan preDispatch()
metode, yang dipicu untuk setiap metode tindakan pengontrol sebelum metode tersebut benar-benar dikirim. Di bagian sumber autoloader kelas Magento ini, Varien_Autoload dipanggil untuk memuat file lingkup kompilasi tertentu.
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)
);
Saat berjalan dalam mode kompilasi, Magento hanya memiliki satu jalur masuk, includes/src/
direktori, sehingga setiap file ditemukan langsung pada percobaan pertama. Dengan sejumlah besar file yang dimiliki Magento, ini menghemat waktu. Cuplikan di bawahnya diambil dari
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";
}
Ketika PHP menyertakan file, konten dikompilasi ke opcode. Ini adalah proses yang perlu dilakukan setiap kali file dimasukkan. Untuk meningkatkan kinerja toko Anda lebih jauh, Anda dapat menginstal APC di server Anda. APC cache versi file yang di-opcode, membuatnya tersedia untuk permintaan selanjutnya. Jadi atas permintaan berikutnya: file akan dibaca dari cache APC, bukannya harus melalui proses yang sama lagi dan menguras kinerja Anda.