Metode yang Tepat dari Pembilasan Cache & Mengelola Kompiler

25

Saya ingin tahu apakah ada prosedur yang disukai untuk hal berikut:

  1. Pembilasan cache Magento
  2. Mengaktifkan / Menonaktifkan Kompiler Magento

1. Pembilasan Cache Magento

Ada beberapa opsi di sini, yaitu:

  • Memeriksa item baris dan mengirimkan penyegaran dari Actionskotak dropdown
  • Mengklik Flush Magento Cachetombol, dan
  • Mengklik Flush Storage Cachetombol

Apakah ada urutan pilihan untuk melakukan ini? Apa perbedaan antara cache Magento & cache Storage?

2. Mengaktifkan / Menonaktifkan Kompiler Magento

a) Mengaktifkan Compiler

Ketika mengaktifkan kompilator Magento, haruskah semua cache toko diaktifkan? Atau haruskah Anda hanya mengaktifkan cache setelah mengaktifkan kompiler & menjalankan proses kompilasi? Setelah Anda mengaktifkan kompiler, Anda harus menyegarkan semua cache? Dan jika demikian, apakah itu termasuk Pembilasan cache Magento & cache penyimpanan (seperti yang disebutkan di atas)

b) Menonaktifkan Kompiler

Ketika menonaktifkan kompilasi Magento, haruskah Anda menonaktifkan semua cache terlebih dahulu, dan kemudian mengaktifkannya kembali setelah dinonaktifkan?

Apakah ada perbedaan antara membiarkan cache menyala dan menonaktifkan / mengaktifkan kompiler? Apa dampak kinerja yang ditimbulkannya?

Masukan apa pun akan sangat dihargai

Moose
sumber
Mudah diingat. Jangan menyiram cache di toko produksi. Jangan aktifkan cache di toko pengembangan.
Ben Lessani - Sonassi
1
Dan jika pembilasan cache di toko produksi Anda menyebabkan situs mogok, Anda tidak melakukan pengujian yang cukup pada server pementasan Anda dan beberapa kode buruk berhasil dilewati, maka "Jangan aktifkan cache di toko pengembangan." Pembilasan cache seharusnya tidak pernah menyebabkan Magento mogok. Kesalahan CBR (Berkomit sebelum siap)
Fiasco Labs

Jawaban:

20

Flush Magento Cache - Ini membersihkan cache (var / cache) dari semua item yang diketahui Magento telah dibuat.

Flush Cache Storage - Menghapus semua yang ada di var / cache, terlepas dari bagaimana file-file di sana dibuat.

Jadi, jika Anda ingin aman Anda sedang membersihkan semuanya, Anda dapat memilih " Flush Cache Storage " yang pada dasarnya akan menghapus var / cache.

Untuk kompiler, saya akan merekomendasikan flushing cache Magento setelah mengaktifkan kompilasi dan menjalankan proses kompilasi. Ini memastikan bahwa cache dibersihkan dari data yang tidak dikompilasi.

Saat menonaktifkan kompilasi, saya akan menonaktifkannya terlebih dahulu, lalu siram cache Magento sesudahnya. Ini lagi memastikan cache bersih dari semua data yang dikompilasi.

Kecuali jika Anda banyak menguji hal-hal, saya selalu merekomendasikan meninggalkan cache. Kompilasi dapat dipukul atau dilewatkan dalam hal kinerja. Saya telah melihatnya membuat segalanya lebih cepat, dan kompilasi berkali-kali terlihat membuat segalanya lebih lambat dan menyebabkan masalah dengan ekstensi pihak ke-3. Saya akan merekomendasikan mendapatkan garis dasar untuk waktu buka halaman kategori (menggunakan alat Firebug / pengembang) dengan kompilasi dimatikan, kemudian lagi dengan kompilasi aktif, dan melihat apakah ada perbedaan besar.

Anda mungkin akan lebih baik menggunakan hal-hal seperti cache opcode di PHP, caching query MySQL yang tepat, menggabungkan file css / js, menggunakan kompresi gzip, menggunakan ekstensi Cache Halaman Penuh, dan pengaturan yang tepat untuk caching browser file.

Rob Mangiafico
sumber
15

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.phpdan 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.phpfile.

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.

TBI Infotech
sumber
3

PENYUSUN

Semua file kompiler dapat ditemukan di includes/Jangan dihapus .htaccessatau config.php. Jika Anda melihat config.phpAnda akan melihat semua yang mengaktifkan / menonaktifkan kompiler yang dilakukan adalah menghapus komentar #sebelum keduanya define. Aman untuk mengasumsikan simpel rm -Rf includes/src;rm -Rf includes/statdari root Magento akan menghapus data yang dikompilasi.

Juga pertimbangkan untuk menggunakan AOE_ClassPathCache bersama dengan APC, karena ini akan cukup jauh untuk menghapus kompiler dari persamaan.

Juga untuk diskusi lebih lanjut tentang topik:


CACHES

Ini murni ditentukan pada apa backend caching yang Anda gunakan melalui local.xml. Jika Anda menggunakan filespenangan cache default , maka menghapus var/cachedan jika Enterprise var/full_page_cache. Jika Anda menggunakan datastore seperti Memcache, Anda harus melakukan ini melalui Magento Flush Cache Storageatau melalui sarana cache datastore untuk menghapus / menghapus cache.

Juga detail lebih lanjut tentang kemungkinan penyimpanan data, Magento menggunakan Zend_Cache untuk mekanisme Caching-nya. Yang akan Anda perhatikan terkait dengan local.xmlcache Xpath.


CATATAN

Jika Anda menjalankan Enterprise, Anda akan menemukan file konfigurasi kedua etc/enterprise.xmladalah tempat datastore untuk FPC ditentukan.

Apa perbedaan antara Flush Cache, dan Flush Cache Storage:

B00MER
sumber
0

Catatan yang sangat penting tentang Magento Compiler. Anda perlu mematikan hal-hal seperti APC ketika melakukan kompilasi karena kompiler tidak dapat mengkompilasi apa yang ada di APC dan akan merusak kompilasi Anda. Bagi saya itu berarti membongkar APC di server dan kemudian restart Apache (httpd).

pengguna3317382
sumber