निस्तब्धता कैश का सही तरीका और संकलक का प्रबंधन


25

मैं जानना चाहूंगा कि क्या निम्नलिखित के लिए कोई पसंदीदा प्रक्रिया है:

  1. Magento कैश का फ्लशिंग
  2. Magento के कंपाइलर को सक्षम / निष्क्रिय करना

1. मैजेंटो कैश का फ्लशिंग

यहाँ कुछ विकल्प हैं, अर्थात्:

  • लाइन आइटम की जाँच करना और Actionsड्रॉपडाउन बॉक्स से रिफ्रेश सबमिट करना
  • Flush Magento Cacheबटन पर क्लिक करना , और
  • Flush Storage Cacheबटन पर क्लिक करना

क्या ऐसा कोई पसंदीदा आदेश है जिसमें ये करना है? Magento कैश और स्टोरेज कैश के बीच अंतर क्या है?

2. Magento के कंपाइलर को सक्षम / निष्क्रिय करना

a) कंपाइलर को सक्षम करना

जब यह Magento के कंपाइलर को सक्षम करने की बात आती है, तो क्या सभी स्टोर कैश सक्षम होना चाहिए? या कंपाइलर को सक्षम करने और संकलन प्रक्रिया को चलाने के बाद आपको केवल कैश को सक्रिय करना चाहिए? एक बार कंपाइलर को सक्षम करने के बाद आपको सभी कैश को रिफ्रेश करना चाहिए? और यदि ऐसा है, तो Magento कैश और स्टोरेज कैश फ्लशिंग शामिल है (जैसा कि ऊपर उल्लेख किया गया है)

b) कंपाइलर को निष्क्रिय करना

जब यह Magento के कंपाइलर को डिसेबल करने की बात आती है, तो क्या आपको पहले सभी कैश को डिसेबल करना चाहिए, और फिर इसे डिसेबल होने के बाद फिर से इनेबल करना चाहिए?

क्या संकलक को छोड़ने और संकलक को सक्षम / सक्षम करने में कोई अंतर है? क्या प्रदर्शन प्रभाव का कारण बनता है?

किसी भी निवेश की बहुत सराहना की जाएगी


इसका याद रखना आसान है। उत्पादन की दुकान पर कैश फ्लश न करें। कैश को डेवलपमेंट स्टोर पर सक्षम न करें।
बेन लेसानी - सोनासी

1
और अगर आपके उत्पादन स्टोर पर कैश फ्लश करने से साइट क्रैश हो जाती है, तो आपने अपने स्टेजिंग सर्वर पर पर्याप्त परीक्षण नहीं किया है और कुछ खराब कोड के माध्यम से मिला है, इसलिए "कैश को एक विकास स्टोर पर सक्षम न करें।" कैश फ्लशिंग कभी भी Magento के दुर्घटना का कारण नहीं बनना चाहिए। सीबीआर त्रुटि (तैयार होने से पहले प्रतिबद्ध)
फासको लैब्स

जवाबों:


20

Flush Magento Cache - यह किसी भी आइटम के कैश (var / cache) को साफ करता है जो Magento जानता है कि उसने बनाया है।

फ्लश कैश स्टोरेज - सब कुछ var / cache में साफ हो जाता है, भले ही उन फाइलों को कैसे बनाया गया हो।

इसलिए, यदि आप सुरक्षित रहना चाहते हैं, तो आप सब कुछ साफ़ कर रहे हैं, तो आप " फ्लश कैश स्टोरेज " चुन सकते हैं जो अनिवार्य रूप से var / cache को खाली कर देगा।

संकलनकर्ता के लिए, मैं संकलन को सक्षम करने और संकलन प्रक्रिया को चलाने के बाद मैगेंटो कैश को फ्लश करने की सलाह दूंगा। यह सुनिश्चित करता है कि कैश किसी भी गैर-संकलित डेटा से साफ हो जाए।

संकलन को अक्षम करने पर, मैं इसे पहले अक्षम कर दूंगा, फिर बाद में Magento कैश फ्लश कर दूंगा। यह फिर से सुनिश्चित करता है कि कैश किसी भी संकलित डेटा से स्पष्ट है।

जब तक आप चीजों का परीक्षण नहीं कर रहे हैं, मैं हमेशा कैश को छोड़ने की सलाह दूंगा। प्रदर्शन के मामले में संकलन हिट या मिस हो सकता है। मैंने देखा है कि यह चीजों को तेज कर रहा है, और कई बार देखा गया संकलन चीजों को धीमा कर देता है और तीसरे पक्ष के एक्सटेंशन के साथ मुद्दों का कारण बनता है। मैं एक श्रेणी पेज लोड समय (फायरबग / डेवलपर टूल का उपयोग करके) संकलन के साथ एक आधार रेखा प्राप्त करने की सलाह देता हूं, फिर संकलन पर फिर से, और देखें कि क्या कोई बड़ा अंतर है।

आप संभवतः PHP में एक opcode कैश, उचित MySQL क्वेरी कैशिंग, css / js फ़ाइलों के संयोजन, gzip संपीड़न का उपयोग करके, पूर्ण पृष्ठ कैश एक्सटेंशन का उपयोग करके और फ़ाइलों के ब्राउज़र कैशिंग के लिए उचित सेटिंग्स जैसी चीजों का उपयोग करने से बेहतर होगा।


15

Magento कैश अलग नहीं है। मूल के साथ शुरू, कैश विकल्प नेविगेट करके देखा जा सकता है

सिस्टम-> कैश मैनेजमेंट

बैकेंड में। आप कैशिंग के विभिन्न क्षेत्रों को देख सकते हैं जिन्हें सक्षम / अक्षम किया जा सकता है, जैसे कि कोई भी कॉन्फ़िगरेशन, लेआउट। xml, ब्लॉक, पूर्ण पृष्ठ और एपी फ़ाइलें। जाहिर है कि आदर्श को लाइव होने के बाद इन सभी को सक्षम होना चाहिए।

कैश को यहां से भी साफ़ या फ्लश किया जा सकता है। लेबल किए गए बटन को दबाने से “Flush Magento Cache”किसी भी कैश फ़ाइलों को फ्लश किया जाएगा जो कि मैगेंटो द्वारा उपयोग किए जाने वाले डिफ़ॉल्ट टैग में निर्मित एक निश्चित सेट से मेल खाते हैं। कैश को खाली करने का यह "सुरक्षित" तरीका है, क्योंकि यह बिल्कुल सब कुछ स्पष्ट नहीं करता है। यदि आप किसी भी द्वितीयक कैश प्रकार का उपयोग कर रहे हैं, तो क्लिक करने “Flush Cache Storage”से यह सुनिश्चित हो जाएगा कि आपने कैश को साफ़ कर दिया है, क्योंकि यह सभी को साफ़ करता है। व्यवस्थापक पृष्ठ पर आपके द्वारा देखे गए अन्य दो बटन जावास्क्रिप्ट और सीएसएस और कैटलॉग छवियों को साफ कर देंगे।

कैश को नेविगेट करने के लिए वैकल्पिक और थोड़ा कम सुरक्षित तरीका है

websiteroot / var / कैश

और मैन्युअल रूप से सभी फ़ाइलों को हटाना। उसी के लिए जाता है

websiteroot / var / full_page__cache

यदि आपके पास पूर्ण पृष्ठ कैश सक्षम है।

एंटरप्राइज एडिशन पर उपलब्ध फुल पेज कैश, आपकी साइट को 10 गुना तक बढ़ा देता है, लेकिन इसके बारे में थोड़ा जानना महत्वपूर्ण है, बस अगर आप किसी गतिशील सामग्री को कैश्ड होने की सूचना देते हैं। देखने के लिए एक दिलचस्प फ़ाइल है

websiteroot / ऐप्स / कोड / कोर / उद्यम / पेजकैश / etc / cache.xml

यहां आप देख सकते हैं कि एफपीसी, ब्लॉक नाम, कंटेनर नाम और सत्र जीवनकाल में क्या कैश किया जा रहा है। यदि आपको कैश से इनमें से किसी भी ब्लॉक को संपादित करने या निकालने के लिए पूरी तरह से आवश्यक है, तो आप ऐसा कर सकते हैं कि पेजकेक मॉड्यूल पर निर्भर मॉड्यूल बनाकर, और वहां किसी भी संशोधन को रखकर।

प्लेसहोल्डर टैग एफपीसी को बताता है कि उस ब्लॉक को गतिशील माना जाता है। जब कोई पृष्ठ लोड किया जाता है, यदि ब्लॉक अभी तक कैश में नहीं है, तो प्लेसहोल्डर टैग में इस आईडी मान को कैश में खोजा जाता है, और यदि यह मौजूद नहीं है, तो उस ब्लॉक को कॉल और उत्पन्न किया जाता है, और आईडी को जोड़ा जाता है। कैश।

Magento के संकलन सुविधा के तहत पाया जा सकता है

प्रणाली> उपकरण> संकलन

यदि आप एक ताजा स्थापित कर रहे हैं, तो आपको संभवतः एक सिस्टम संदेश मिलता है कि दोनों includes and includes/src/निर्देशिकाओं को योग्य बनाया जाना चाहिए। जब यह किया जाता है, तो हम 'रन संकलन प्रक्रिया' बटन को हिट कर सकते हैं और आप मूल रूप से कर रहे हैं, Magento कोर संकलन का उपयोग कर रहा है।

जब Magento यह स्रोत कोड संकलित करता है, तो फ्रेमवर्क कुछ चीजें करता है। या तो व्यवस्थापक के माध्यम से ट्रिगर किया जा रहा है या 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 फ़ाइलों की प्रतिलिपि बनाता है

एप्लिकेशन / कोड

और करने के लिए कामगार निर्देशिका

/ / Src शामिल

निर्देशिका। जैसा कि आप नीचे स्निपेट में देख सकते हैं: इस प्रक्रिया के दौरान मैगेंटो सभी फ़ाइलों और निर्देशिकाओं के माध्यम से पुनरावृत्ति करता है। इन रास्तों को अंततः फ़ाइलनाम के रूप में उपयोग किया जाता है। जब पुनरावर्ती प्रक्रिया एक फ़ाइल को हिट करती है तो यह PHP एक्सटेंशन के लिए जांच करेगी और जब पाया जाता है, तो फ़ाइल को कंपाइल डायरेक्टरी में कॉपी किया जाता है। अन्य फ़ाइल प्रकारों को अछूता रखा गया है।

एक उदाहरण के रूप में: वर्ग Mage_Catalog_Model_Category के लिए पथ था

एप्लिकेशन / कोड / कोर / दाना / सूची / मॉडल / 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 /

लेकिन एक निर्देशिका के भीतर संग्रहीत किया जाता है जिसका नाम संबंधित नामस्थान है, सोचें: दाना, उद्यम या आपके स्वयं के दिए गए नाम स्थान।

इन नामस्थान निर्देशिकाओं के भीतर नियंत्रक प्रति मॉड्यूल संग्रहीत किए जाते हैं और नियंत्रक निर्देशिका संरचना को अछूता रखा जाता है। वही फ़ाइल नाम के लिए जाता है, यह केवल एक सटीक प्रतिलिपि है। यह सभी तर्क निम्न विधि में पाए जा सकते हैं$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 और __checkout.pp

इन स्कोप फ़ाइलों के निर्माण की प्रक्रिया के दौरान, Magento स्वचालित रूप से सभी क्लास फैली हुई है और इंटरफेस है कि गुंजाइश सूची में प्रदान की कक्षाओं द्वारा इस्तेमाल किया जा रहा है।

जगह और संकलित सभी फाइलों के साथ, Magento उपयोग के लिए संकलन सुविधा को सक्षम करने के लिए तैयार है।

पिछले नहीं बल्कि कम से कम संकलन से संबंधित विन्यास को समायोजित किया गया है। इस फ़ाइल includes/config.phpको निम्न दो स्थिरांक पर पाया जा सकता है । संकलन को सक्षम करने पर COMPILER_INCLUDE_PATH के बारे में लाइन अनियंत्रित है और इस तरह कार्रवाई के लिए तैयार है।

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

कॉन्फ़िगरेशन फ़ाइल को समायोजित करने के लिए ज़िम्मेदार कोड रजिस्टर में पाया जा सकता है Mage_Compiler_Model_Process class

बूटस्ट्रैप के दौरान संकलन विन्यास फाइल भीतर शामिल है index.php file (around line 44)। यह संपूर्ण ढांचे में शामिल_पाठ स्थिरांक उपलब्ध कराता है। संग्रह_पथ वह चीज़ है जिसे आप केवल अपने संकलित फ़ाइलों के उपयोग के बारे में अधिक सांख्यिकीय जानकारी प्राप्त करने के लिए मैन्युअल रूप से सक्षम कर सकते हैं। इसे लाइव पर सक्षम नहीं किया जाना चाहिए।

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

इस बिंदु पर Magento जाँच करेगा कि संकलन मोड निम्नलिखित कथन के साथ सक्षम है या नहीं। कोडबेस (g grep ’का उपयोग करके) के माध्यम से जाने पर आप देखेंगे कि इस तर्क को lib/Varien/Autoload.phpफ़ाइल में पाया जा सकता है ।

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

देखने के लिए दूसरी जगह है Mage_Core_Controller_Varien_Action। इस वर्ग में आपको वह preDispatch()विधि मिलेगी , जो वास्तव में प्रेषण से पहले प्रत्येक नियंत्रक क्रिया विधि के लिए ट्रिगर होती है। स्रोत के इस हिस्से में Magento के ऑटोलैडर क्लास 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)
        );

जब संकलन मोड में चल रहे Magento में केवल एक ही शामिल पथ होता है, includes/src/निर्देशिका, इसलिए प्रत्येक फ़ाइल पहली कोशिश में सीधे मिलती है। मैगेंटो के पास पर्याप्त मात्रा में फाइलें होने के कारण, यह काफी समय बचाता है। नीचे का स्निपेट से लिया गया है

एप्लिकेशन / 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 करने के लिए संकलित किया जाता है। यह एक ऐसी प्रक्रिया है जिसमें हर बार एक फ़ाइल शामिल करने की आवश्यकता होती है। अपनी दुकान के प्रदर्शन को बेहतर बनाने के लिए और भी आगे आप अपने सर्वर पर एपीसी स्थापित कर सकते हैं। एपीसी फाइलों के ऑपकोडेड संस्करणों को कैश करता है, जो उन्हें बाद के अनुरोधों के लिए उपलब्ध कराता है। तो अगले अनुरोध पर: फ़ाइल एपीसी कैश से पढ़ी जाएगी, इसके बजाय फिर से उसी प्रक्रिया से गुजरने और अपने प्रदर्शन को खत्म करने के लिए।


3

संकलक

सभी संकलक फ़ाइलें includes/बस मिटा नहीं .htaccessया में पाया जा सकता है config.php। यदि आप देखते हैं कि config.phpआप सभी को सक्षम / अक्षम करने वाले कंपाइलर को नोटिस करेंगे #, तो दोनों से पहले टिप्पणियों को हटा दिया जाएगा definerm -Rf includes/src;rm -Rf includes/statMagento रूट से संकलित डेटा मिटा देगा से एक साधारण मान लेना सुरक्षित है ।

APC के साथ AOE_ClassPathCache का उपयोग करने पर भी विचार करें , क्योंकि यह कंपाइलर को समीकरण से बाहर निकालने के लिए पर्याप्त होगा।

विषय पर अधिक चर्चा के लिए भी:


कैश

यह विशुद्ध रूप से परिभाषित है कि कैशिंग बैकेंड आपके द्वारा उपयोग कर रहे हैं local.xml। यदि आप डिफ़ॉल्ट filesकैश हैंडलर का उपयोग कर रहे हैं , तो पोंछना var/cacheऔर यदि एंटरप्राइज var/full_page_cache। यदि आप डेटासटोर जैसे मेमेचेस का उपयोग कर रहे हैं, तो आपको या तो मैगनेटो के Flush Cache Storageमाध्यम से या कैश डैटस्टोर को अपने कैश को साफ / पोंछना होगा।

संभावित डेटा स्टोर पर भी अधिक विवरण, Magento अपने कैशिंग तंत्र के लिए Zend_Cache का उपयोग करता है। आप देखेंगे जो local.xmlकैश Xpaths से संबंधित है ।


ध्यान दें

यदि आप एंटरप्राइज़ चला रहे हैं, तो आपको दूसरी कॉन्फ़िगरेशन फ़ाइल मिल जाएगी etc/enterprise.xmlजहाँ FPC के लिए डेटास्टोर परिभाषित किया गया है।

फ्लश कैश और फ्लश कैश स्टोरेज के बीच अंतर का पता लगाएं:


0

Magento के कंपाइलर के बारे में एक बहुत ही महत्वपूर्ण नोट। संकलन करते समय आपको एपीसी जैसी चीजों को बंद करने की आवश्यकता होती है क्योंकि संकलनकर्ता एपीसी में क्या संकलित नहीं कर सकता है और आपके संकलन को भ्रष्ट कर देगा। मेरे लिए इसका मतलब होगा कि सर्वर पर एपीसी उतारना और फिर अपाचे (httpd) को फिर से शुरू करना।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.