用动态占位符实现整页缓存的方法

时间:2012-02-29 08:02:14

标签: php zend-framework

我想尝试创建类似Zend的Server Pagecache。我想要实现的是存储页面输出,所以我想这将是直接的html,但有可能向页面插入一些动态数据。

2 个答案:

答案 0 :(得分:0)

您始终可以使用ajax加载动态数据。 例: 如果用户登录并投票或其他什么。

答案 1 :(得分:0)

输出缓存是一个很大的主题。做得对,你需要在设计上思考一下。

这是两种方式。代码示例仅用于解释,它不是一个可行的解决方案。

  1. 阻止缓存和动态合成。可能是最好的方式。将您的页面划分为几个bloks。每个块应由单独的函数/类生成。您可以使用Zend_Cache_Frontend_ *对象来缓存这些块。一旦您的应用程序知道要显示的内容,就可以在控制器中使用缓存块和动态部分组合输出。
  2. 
        class CachedController extends Zend_Action_Controller
        {
    
        public function indexAction()
        {
            $this->_view->leftBlock = $this->leftBlock();
            $this->_view->rightBlock = $this->rightBlock();
        }
    
        protected function leftBlock()
        {
            // prepare left block, can use Zend_View if you like
            // use Zend_Cache to cache the block 
        }
    
    
        protected function rightBlock()
        {
            // prepare left block, can use Zend_View if you like
            // use Zend_Cache to cache the block
        }
    
        }
    
    /* VIEW SCRIPT */
    <html>
      <body>
        <div class="left">
          Left cached block here
          <?php echo $this->leftBlock; ?>
        </div>
        <div class="main">
          Do Your dynamic part here
        </div>
        <div class="right">
          Right cached block here
          <?php echo $this->rightBlock; ?>
        </div>
      </body>
    </html>
    
    1. 使用子字符串替换的整页缓存。如果您不希望将页面划分为块,则可以缓存整个页面(也使用Zend_Cache_Frontend_ *),然后使用PHP str函数替换或插入动态部分。您将需要捕获View的输出,而不是自动地通过框架发送它(请参阅有关如何更改此文档的文档)。