บล็อกเจาะรู FPC แบบคงที่


16

อะไรจะเป็นวิธีที่ง่ายที่สุดในการสร้างรูเจาะ FPC สำหรับบล็อกแบบคงที่ (บล็อก cms)?

สมมติว่าฉันมีบล็อกแบบสแตติกที่เรียกบล็อกอื่นภายในที่มีพฤติกรรมที่ฉันต้องการเป็นแบบไดนามิกในทุก ๆ หน้าโหลด

คำตอบ:


10

วิธีที่ง่ายที่สุดที่ฉันค้นพบในการเจาะรูบล็อก CMS ในโมดูล Full Page Caching ของ Magento Enterprise มีเพียงไม่กี่ขั้นตอน:

ก่อนอื่นมาดูโครงสร้างไดเรกทอรีที่ต้องการ:

BranchLabs/CacheBuster/
    Block/Cms.php         # We inherit almost all functions from the Mage CMS
                            block, only overriding the "getCacheKeyInfo" function.
                            We do this to set the CMS block ID for later use by
                            our placeholder model.
    etc/cache.xml         # Here we target our module's version of the CMS block
                            and set their cache lifetimes to 0.
    Model/Placeholder.php # This module is responsible for freshly rendering our
                            CMS blocks every time they're requested.

ด้วยความเข้าใจจากบนลงล่างนี่คือวิธีการกรอกไฟล์เหล่านั้น

  1. สร้างคลาสบล็อกของคุณเองซึ่งขยายบล็อกใน Magento CMS คุณจะต้องแทนที่ฟังก์ชัน "getCacheKeyInfo" ดังนี้:

    <?php
    // BranchLabs/CacheBuster/Block/Cms.php
    class BranchLabs_CacheBuster_Block_Cms extends Mage_Cms_Block_Block {
    
        // Used to set the cache placeholder attribute definitions, required in
        // the placeholder's "_renderBlock" function.
        public function getCacheKeyInfo() {
            return array('block_id' => $this->getBlockId());
        }
    
    }
  2. ตั้งค่ารูปแบบตัวแทนที่รับผิดชอบในการแสดงบล็อก CMS ของเราโดยไม่ใช้แคช

    <?php
    // BranchLabs/CacheBuster/Model/Placeholder.php
    class BranchLabs_CacheBuster_Model_Placeholder extends Enterprise_PageCache_Model_Container_Abstract {
    
        public function applyWithoutApp(&$content)
        {
            return false;
        }
    
        protected function _getCacheId()
        {
            $id = 'CACHEBUSTER_HOLEPUNCH_' . microtime() . '_' . rand(0,99);
            return $id;
        }
    
        /**
         * CacheBuster doesn't cache data! Do nothing.
         */
        protected function  _saveCache($data, $id, $tags = array(), $lifetime = null)
        {
            return $this;
        }
    
        /**
         * Render fresh block content.
         *
         * @return false|string
         */
        protected function _renderBlock()
        {
            $block = $this->_placeholder->getAttribute('block');
            $block = new $block;
            // Get the block_id attribute we originally set in our CMS block's
            // getCacheKeyInfo function.
            $block_id = $this->_placeholder->getAttribute('block_id');
            $block->setBlockId($block_id);
            $block->setLayout(Mage::app()->getLayout());
            return $block->toHtml();
        }
    }
  3. ตั้งค่า cache.xml เพื่อกำหนดเป้าหมายบล็อก CMS ที่สร้างขึ้นใหม่และแสดงผลโดยใช้ตัวยึดตำแหน่งที่สร้างขึ้นใหม่ของเรา

    <!-- BranchLabs/CacheBuster/etc/cache.xml -->
    <?xml version="1.0" encoding="UTF-8"?>
    <config>
      <placeholders>
        <arbitrary_unique_identifier>
          <block>cachebuster/cms</block>
          <placeholder>ARBITRARY_UNIQUE_IDENTIFIER</placeholder>
          <container>BranchLabs_CacheBuster_Model_Placeholder</container>
          <cache_lifetime>0</cache_lifetime>
        </arbitrary_unique_identifier>
      </placeholders>
    </config>
  4. ใน CMS ให้แทนที่ประเภทบล็อกสำหรับบล็อกที่คุณพยายามแสดงนอกแคชด้วยบล็อกพิสูจน์ CMS ใหม่ของเรา: {{block type="cachebuster/cms" block_id="cacheproof"}}


ขอบคุณเกรแฮมฉันจะลองและบอกให้คุณรู้ว่ามันเป็นยังไง
LDusan

นี่เป็นการแก้ปัญหาของคุณที่ @LDusan หรือไม่
เกรแฮม

ยังไม่ได้ลองฉันจะให้คุณรู้ :)
LDusan

เกรแฮมฉันคิดว่างานนี้ข้อเสียเปรียบเพียงอย่างเดียวคือคุณจะต้องเปลี่ยนคลาสบล็อก cms ที่มีอยู่หากคุณไม่ต้องการแคช แต่ไม่ว่าจะเป็นทางออกที่ดี ขอบคุณ
LDusan

3

ปัญหาคือทีมหลักของ Magento ลืมบล็อกแคชแบบสแตติกและสิ่งที่ไม่ได้ถูกแคชทีละรายการไม่สามารถเจาะรูได้

ดังนั้นวิธีการแก้ปัญหาคือการแก้ไขแคชแรก


1

แน่นอนทางออกจะเปลี่ยนวิธีการทำแคช

FPC ของ Lesti กำลังทำสิ่งนี้ในที่ระลึกของฉันและฟรี มันขาดการสนับสนุนหลายเว็บไซต์เท่านั้น แต่มันสมบูรณ์แบบสำหรับ 1 เว็บไซต์และคุณจะสามารถระบุบล็อคที่ต้องเจาะรูแบบไดนามิก

ฉันยังลองใช้ FPC ของ Amasty คุณจะต้องจ่ายเงินและมันไม่ใช่โซลูชันแคชที่สมบูรณ์แบบสำหรับ CE ฉันเดา แต่มันใช้งานได้ดีคุณสามารถระบุการแคชบล็อก / หน้าหรือทั้งสองอย่าง คุณยังสามารถตั้งค่าอัตราการบีบอัดของวัตถุที่แคชและเก็บไว้ใน Db / ระบบแฟ้ม (ช้า) หรือ memcached

ขอให้คุณโชคดี.

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