วิธีแก้ไขการล้างแคชและการจัดการคอมไพเลอร์


25

ฉันต้องการที่จะรู้ว่ามีขั้นตอนที่ต้องการสำหรับต่อไปนี้:

  1. ล้างข้อมูลแคช Magento
  2. การเปิด / ปิดการใช้งาน Magento Compiler

1. การล้างแคชของวีโอไอพี

มีตัวเลือกน้อยที่นี่คือ:

  • ตรวจสอบรายการโฆษณาและส่งการรีเฟรชจากActionsช่องแบบเลื่อนลง
  • คลิกที่Flush Magento Cacheปุ่มและ
  • คลิกที่Flush Storage Cacheปุ่ม

มีคำสั่งที่ต้องการในการทำสิ่งเหล่านี้หรือไม่? อะไรคือความแตกต่างระหว่าง Magento cache และ Storage cache?

2. การเปิด / ปิดการใช้งาน Magento Compiler

a) การเปิดใช้งานคอมไพเลอร์

เมื่อพูดถึงการเปิดใช้งานคอมไพเลอร์ของ Magento เราควรเปิดใช้งานแคชร้านค้าทั้งหมดหรือไม่ หรือคุณควรเปิดใช้งานแคชเท่านั้นหลังจากเปิดใช้งานคอมไพเลอร์และเรียกใช้กระบวนการรวบรวม? เมื่อคุณเปิดใช้งานคอมไพเลอร์แล้วคุณควรรีเฟรชแคชทั้งหมดหรือไม่ และถ้าเป็นเช่นนั้นจะมีการล้างแคช Magento & ที่เก็บข้อมูลแคช (ดังที่ได้กล่าวไว้ข้างต้น)

b) การปิดการใช้งานคอมไพเลอร์

เมื่อต้องปิดการใช้งานคอมไพเลอร์ Magento คุณควรปิดการใช้งานแคชทั้งหมดก่อนแล้วจึงเปิดใช้งานอีกครั้งหลังจากปิดการใช้งานหรือไม่

มีความแตกต่างระหว่างการเปิดแคชและปิดการใช้งาน / เปิดใช้งานคอมไพเลอร์หรือไม่? ส่งผลกระทบต่อประสิทธิภาพการทำงานอะไรบ้าง

การป้อนข้อมูลใด ๆ จะได้รับการชื่นชมมาก


ง่ายต่อการจดจำ อย่าล้างแคชในที่จัดเก็บข้อมูลจริง อย่าเปิดใช้งานแคชในที่เก็บการพัฒนา
Ben Lessani - Sonassi

1
และหากการล้างแคชในที่จัดเก็บข้อมูลการผลิตของคุณทำให้ไซต์หยุดทำงานคุณไม่ได้ทำการทดสอบบนเซิร์ฟเวอร์การแสดงละครของคุณและรหัสที่ไม่ดีบางส่วนได้รับผ่านดังนั้น "อย่าเปิดใช้งานแคชในที่เก็บการพัฒนา" การล้างแคชไม่ควรทำให้ Magento พัง ข้อผิดพลาด CBR (กระทำก่อนจะพร้อม)
Fiasco Labs

คำตอบ:


20

Flush Magento Cache - เป็นการลบแคช (var / cache) ของรายการใด ๆ ที่ Magento รู้ว่าสร้างขึ้น

Flush Cache Storage - ล้างทุกอย่างใน var / cache ไม่ว่าไฟล์เหล่านั้นจะถูกสร้างขึ้นมาได้อย่างไร

ดังนั้นหากคุณต้องการความปลอดภัยคุณจะล้างทุกอย่างคุณอาจเลือก " Flush Cache Storage " ซึ่งจะล้าง var / cache

สำหรับคอมไพเลอร์ฉันขอแนะนำให้ล้างแคช Magento หลังจากเปิดใช้งานการรวบรวมและเรียกใช้กระบวนการรวบรวม สิ่งนี้ทำให้มั่นใจได้ว่าแคชถูกล้างออกจากข้อมูลที่ไม่ได้รวบรวมใด ๆ

เมื่อปิดใช้งานการรวบรวมฉันจะปิดใช้งานก่อนจากนั้นจึงล้างแคช Magento หลังจากนั้น สิ่งนี้จะช่วยให้แน่ใจได้ว่าแคชไม่มีการรวบรวมข้อมูลใด ๆ

นอกจากว่าคุณกำลังทดสอบสิ่งต่าง ๆ มากมายฉันขอแนะนำให้คุณปล่อยแคชไว้เสมอ การรวบรวมสามารถตีหรือพลาดในแง่ของประสิทธิภาพ ฉันเคยเห็นมันทำให้สิ่งต่าง ๆ เร็วขึ้นและการรวบรวมหลายครั้งที่เห็นทำให้สิ่งต่าง ๆ ช้าลงและทำให้เกิดปัญหากับส่วนขยายของบุคคลที่สาม ฉันขอแนะนำให้ใช้พื้นฐานสำหรับเวลาในการโหลดหน้าหมวดหมู่ (โดยใช้เครื่องมือ Firebug / นักพัฒนาซอฟต์แวร์) โดยปิดการรวบรวมจากนั้นรวบรวมใหม่อีกครั้งและดูว่ามีความแตกต่างกันมากหรือไม่

คุณน่าจะดีกว่าถ้าใช้สิ่งต่าง ๆ เช่นแคช opcode ใน PHP, การแคชคิวรี่ MySQL ที่เหมาะสม, การรวมไฟล์ css / js, โดยใช้การบีบอัด gzip, ใช้ส่วนขยายแคชแบบเต็มหน้าและการตั้งค่าที่เหมาะสมสำหรับการแคชไฟล์เบราว์เซอร์


15

แคชวีโอไอพีไม่แตกต่างกัน เริ่มต้นด้วยพื้นฐานตัวเลือกแคชสามารถดูได้โดยไปที่

ระบบ -> การจัดการแคช

ในแบ็กเอนด์ คุณสามารถดูพื้นที่ต่าง ๆ ของการแคชที่สามารถเปิดใช้งาน / ปิดใช้งานเช่นการกำหนดค่าใด ๆ , layout.xml, บล็อก, เต็มหน้าและไฟล์ api เห็นได้ชัดว่าอุดมคติคือการเปิดใช้งานสิ่งเหล่านี้เมื่อเว็บไซต์เปิดใช้งาน

แคชสามารถล้างหรือล้างออกได้จากที่นี่ การกดปุ่มที่มีข้อความ“Flush Magento Cache”จะล้างไฟล์แคชใด ๆ ที่ตรงกับชุดของแท็กเริ่มต้นที่ Magento ใช้ นี่เป็นวิธีที่“ ปลอดภัยกว่า” ในการล้างแคชเนื่องจากมันไม่ได้ล้างทุกอย่าง หากคุณใช้แคชประเภทที่สองการคลิก“Flush Cache Storage”จะช่วยให้มั่นใจได้ว่าคุณได้ล้างแคชแล้วเพราะจะล้างทุกอย่าง อีกสองปุ่มที่คุณเห็นในหน้าผู้ดูแลระบบจะล้าง javascript และ css และรูปภาพแคตตาล็อก

วิธีอื่นและปลอดภัยน้อยลงเล็กน้อยในการล้างแคชคือการนำทางไปยัง

websiteroot / var / แคช

และลบไฟล์ทั้งหมดด้วยตนเอง กันไปสำหรับ

websiteroot / var / full_page__cache

หากคุณเปิดใช้งานแคชแบบเต็มหน้า

แคชแบบเต็มหน้ามีอยู่ใน Enterprise Edition ทำให้ไซต์ของคุณเร็วขึ้นถึง 10 เท่า แต่สิ่งสำคัญคือการรู้เพียงเล็กน้อยเกี่ยวกับเรื่องนี้ในกรณีที่คุณสังเกตเห็นว่าเนื้อหาแบบไดนามิกใด ๆ ถูกแคช ไฟล์ที่น่าสนใจที่จะดูคือ

websiteroot / app / รหัส / หลัก / องค์กร / PageCache / etc / cache.xml

ที่นี่คุณสามารถดูสิ่งที่ถูกแคชโดย FPC ชื่อบล็อกชื่อคอนเทนเนอร์และอายุการใช้งานของเซสชัน หากคุณพบว่าจำเป็นต้องมีการแก้ไขหรือลบบล็อคเหล่านี้ออกจากแคชคุณสามารถทำได้โดยการสร้างโมดูลที่ขึ้นอยู่กับโมดูล PageCache และทำการแก้ไขใด ๆ

แท็กตัวยึดบอก FPC ว่าบล็อกนั้นถูกพิจารณาว่าเป็นแบบไดนามิก เมื่อเพจถูกโหลดหากบล็อกยังไม่อยู่ในแคชค่า ID นี้ในแท็กตัวยึดจะค้นหาในแคชและหากไม่มีอยู่บล็อกนั้นจะถูกเรียกและสร้างขึ้นและบล็อกนั้นจะถูกเพิ่มและ ID จะถูกเพิ่มเข้าไป แคช

คุณสมบัติการรวบรวมของวีโอไอพีอยู่ภายใต้

ระบบ> เครื่องมือ> การรวบรวม

หากคุณกำลังเรียกใช้การติดตั้งใหม่คุณอาจได้รับข้อความของระบบว่าทั้งสองincludes and includes/src/ไดเรกทอรีจะต้องทำการเขียนได้ เมื่อเสร็จแล้วเราสามารถกดปุ่ม 'เรียกใช้กระบวนการรวบรวม' และโดยทั่วไปคุณทำเสร็จแล้ววีโอไอพีคอร์กำลังใช้การรวบรวม

เมื่อวีโอไอพีคอมไพล์มันเป็นซอร์สโค้ดกรอบจะทำบางสิ่ง การถูกทริกเกอร์ผ่านผู้ดูแลระบบหรือshell, see shell/compiler.phpการรวบรวมทั้งหมดจะกระทำโดยคลาสเดียว: Mage_Compiler_Model_Process. ภายในชั้นเรียนนี้คุณจะพบตัวอย่างต่อไปนี้ซึ่งเป็นมุมมองที่ดีที่สุดของกระบวนการทั้งหมด

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

ถูกปิดโดยการ$this->_collectFiles();โทร Magento คัดลอกไฟล์ PHP ทั้งหมดจากทั้งสอง

app / รหัส

และ lib ไดเรกทอรีไปที่

/ includes / src

ไดเรกทอรี ดังที่คุณเห็นในตัวอย่างด้านล่าง: ในระหว่างกระบวนการนี้วีโอไอพีจะวนซ้ำซ้ำผ่านไฟล์และไดเรกทอรีทั้งหมด ในที่สุดเส้นทางเหล่านี้จะถูกใช้เป็นชื่อไฟล์ เมื่อกระบวนการเรียกซ้ำพบไฟล์มันจะตรวจสอบส่วนขยาย PHP และเมื่อพบไฟล์จะถูกคัดลอกไปยังไดเรกทอรีคอมไพเลอร์ ไฟล์ประเภทอื่น ๆ จะไม่ถูกแตะต้อง

ตัวอย่างเช่น: พา ธ สำหรับคลาส Mage_Catalog_Model_Category คือ

app / รหัส / core / Mage / แคตตาล็อก / รุ่น / Category.php

แต่เมื่อเปิดใช้งานการคอมไพล์แล้วตอนนี้ก็กลายเป็น

รวมถึง / 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;
    }

ผู้ควบคุมกำลังได้รับการรักษาอื่น ๆ ไดเรกทอรีของตัวควบคุมทั้งหมดจะถูกคัดลอกไปยัง

รวมถึง / src /

แต่จะถูกเก็บไว้ในไดเรกทอรีที่มีชื่อของมันเกี่ยวข้องกับ namespace คิดว่า: Mage, Enterprise หรือ namespace ที่กำหนดของคุณเอง

ภายในไดเรกทอรีเนมสเปซเหล่านี้คอนโทรลเลอร์จะถูกจัดเก็บตามโมดูลและโครงสร้างไดเรกทอรีคอนโทรลเลอร์จะไม่ถูกแตะต้อง เช่นเดียวกันกับชื่อไฟล์มันเป็นเพียงสำเนาที่แน่นอน ตรรกะทั้งหมดนี้สามารถพบได้ในวิธีการดังต่อไปนี้$this->_copyControllers($path);

การคอมไพล์ระดับที่สองนี้รวบรวมขอบเขตทั้งหมดและรายการคลาสตามลำดับจากผู้ดูแลระบบ ขอบเขตทั้งหมดเหล่านี้กำลังถูกประมวลผลโดยดึงเนื้อหาของไฟล์คลาสที่เกี่ยวข้องและเขียนลงในไฟล์เดียวที่ตั้งชื่อตามขอบเขตที่กำหนด

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

ตามค่าเริ่มต้น Magento จะสร้างไฟล์ขอบเขตที่แตกต่างกันสี่ไฟล์:

__default.php, __catalog.php, __checkout.php และ __cms.php

ในระหว่างกระบวนการสร้างไฟล์ขอบเขตเหล่านี้วีโอไอพีจะแยกวิเคราะห์การขยายคลาสและอินเทอร์เฟซทั้งหมดที่ใช้โดยคลาสที่ให้ไว้ในรายการขอบเขตโดยอัตโนมัติ

เมื่อไฟล์ทั้งหมดอยู่ในสถานที่และรวบรวมแล้ววีโอไอพีก็พร้อมที่จะเปิดใช้งานคุณสมบัติการรวบรวมสำหรับการใช้งาน

สุดท้าย แต่ไม่ท้ายสุดการกำหนดค่าที่เกี่ยวข้องกับการคอมไพล์จะถูกปรับ ไฟล์นี้สามารถพบได้ที่includes/config.phpและถือสองค่าคงที่ต่อไปนี้ เมื่อเปิดใช้งานการคอมไพล์บรรทัดที่เกี่ยวข้องกับ COMPILER_INCLUDE_PATH จะไม่แสดงความคิดเห็นและพร้อมสำหรับการดำเนินการ

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

รหัสที่เป็นผู้รับผิดชอบสำหรับการปรับการตั้งค่าไฟล์ที่สามารถพบได้ในวิธีการ registerIncludePath Mage_Compiler_Model_Process classของ

index.php file (around line 44)ในระหว่างการบูตแฟ้มการกำหนดค่าการรวบรวมรวมอยู่ภายใน สิ่งนี้ทำให้ค่าคงที่ include_path ยังคงมีอยู่ตลอดทั้งเฟรมเวิร์ก collect_path เป็นสิ่งที่คุณสามารถเปิดใช้งานด้วยตนเองเพื่อรับข้อมูลสถิติเพิ่มเติมเกี่ยวกับการใช้งานไฟล์ที่รวบรวมของคุณ สิ่งนี้ไม่ควรเปิดใช้ในการถ่ายทอดสด

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

จากจุดนี้บน Magento จะตรวจสอบว่ามีการเปิดใช้งานโหมดการคอมไพล์ด้วยคำสั่งต่อไปนี้หรือไม่ การใช้ codebase (โดยใช้ 'grep') คุณจะสังเกตได้ว่าตรรกะส่วนใหญ่สามารถพบได้ในlib/Varien/Autoload.phpไฟล์

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

สถานที่อื่น ๆ Mage_Core_Controller_Varien_Actionที่จะมองหาคือ ในคลาสนี้คุณจะพบpreDispatch()วิธีการซึ่งจะถูกเรียกใช้สำหรับวิธีการดำเนินการควบคุมแต่ละวิธีก่อนที่จะส่งวิธีการจริง ในส่วนนี้ของคลาส Autoloader ของวีโอไอพีรุ่น Varien_Autoload ถูกเรียกใช้เพื่อโหลดไฟล์ขอบเขตการรวบรวมเฉพาะ

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

เมื่อทำงานในโหมดการรวบรวมวีโอไอพีจะมีพา ธ รวมเดียวเท่านั้นincludes/src/ดังนั้นไดเรกทอรีจะพบไฟล์แต่ละไฟล์โดยตรงในครั้งแรก ด้วยไฟล์จำนวนมากที่วีโอไอพีมีอยู่ทำให้ประหยัดเวลาได้ค่อนข้างมาก ตัวอย่างด้านล่างถูกนำมาจาก

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";
}

เมื่อ PHP รวมไฟล์เนื้อหาจะถูกคอมไพล์เป็น opcode นี่เป็นกระบวนการที่ต้องทำในแต่ละครั้งที่มีไฟล์รวมอยู่ด้วย เพื่อปรับปรุงประสิทธิภาพร้านค้าของคุณให้ดียิ่งขึ้นคุณสามารถติดตั้ง APC บนเซิร์ฟเวอร์ของคุณ APC จะแคชไฟล์เวอร์ชันที่มีการเข้ารหัสเพื่อให้พร้อมใช้งานสำหรับคำขอต่อไป ดังนั้นเมื่อมีคำขอถัดไป: ไฟล์จะถูกอ่านจากแคช APC แทนที่จะต้องผ่านกระบวนการเดิมอีกครั้งและระบายประสิทธิภาพของคุณ


3

COMPILER

ไฟล์คอมไพเลอร์ทั้งหมดสามารถพบได้ในincludes/เพียงไม่เช็ดหรือ.htaccess config.phpถ้าคุณดูconfig.phpคุณจะสังเกตเห็นทั้งหมดเปิด / ปิดการใช้งานคอมไพเลอร์ไม่เป็นลบความคิดเห็นก่อนที่ทั้งสอง# defineการคาดเดาได้ง่ายrm -Rf includes/src;rm -Rf includes/statจากรูทวีโอไอพีจะทำการลบข้อมูลที่รวบรวม

ลองพิจารณาใช้AOE_ClassPathCacheพร้อมกับ APC เนื่องจากจะเป็นการดีพอที่จะลบคอมไพเลอร์ออกจากสมการ

นอกจากนี้สำหรับการอภิปรายเพิ่มเติมในหัวข้อ:


แคช

local.xmlนี้ถูกกำหนดไว้อย่างหมดจดในสิ่งที่แบ็กเอนด์แคชคุณกำลังใช้ผ่านของคุณ หากคุณกำลังใช้เริ่มต้นfilesจัดการแคชแล้วเช็ดและถ้าองค์กรvar/cache var/full_page_cacheหากคุณใช้ที่เก็บข้อมูลเช่น Memcache คุณจะต้องทำเช่นนี้ผ่าน Magento Flush Cache Storageหรือผ่านทางที่หมายถึงที่เก็บข้อมูลแคชต้องล้าง / ล้างแคช

นอกจากนี้ยังมีรายละเอียดเพิ่มเติมเกี่ยวกับแหล่งข้อมูลที่เป็นไปได้วีโอไอพีใช้Zend_Cacheสำหรับกลไกการแคช สิ่งที่คุณจะสังเกตเห็นเกี่ยวข้องกับlocal.xmlแคช Xpaths


บันทึก

หากคุณใช้งาน Enterprise คุณจะพบไฟล์กำหนดค่าที่สองetc/enterprise.xmlคือที่เก็บข้อมูลสำหรับ FPC

อะไรคือความแตกต่างระหว่าง Flush Cache และ Flush Cache Storage:


0

หมายเหตุสำคัญมากเกี่ยวกับ Magento Compiler คุณต้องปิดสิ่งต่าง ๆ เช่น APC เมื่อทำการคอมไพล์เนื่องจากคอมไพเลอร์ไม่สามารถรวบรวมสิ่งที่อยู่ใน APC และจะทำให้การคอมไพล์ของคุณเสียหาย สำหรับฉันนั่นหมายถึงการยกเลิกการโหลด APC ที่เซิร์ฟเวอร์จากนั้นรีสตาร์ท Apache (httpd)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.