代码之家  ›  专栏  ›  技术社区  ›  Steve

Zend_导航缓存

  •  1
  • Steve  · 技术社区  · 16 年前

    当我使用Zend_缓存对Zend_导航的页面层次进行缓存时,Zend_导航的页面层次结构出现混乱。

    背景:我有大约50页和大约300个产品存储在一个数据库中。我查询数据库并创建一个数组以提供给Zend_Navigation。

            $secondsBetweenRefreshes = APPLICATION_ENV == 'development' ? 30 : 300; 
            self::$cache = Zend_Cache::factory( 'Core', 'File',
                                 array( 'automatic_serialization' => true,
                                        'lifetime' => $secondsBetweenRefreshes ),
                                 array( 'cache_dir' => CACHE_PATH . 'nav/' )
                               );
    

    这个很好用

        $struct = $cache->load('Zend_Navigation'); 
        if (empty($struct))
        {
            $cache->save($struct = self::getSiteStructure() );
        }
        return new Zend_Navigation( $struct );
    

    这个被搅乱了

        $struct = $cache->load('Zend_Navigation'); 
        if (empty($struct))
        {
            $cache->save($struct = new Zend_Navigation( self::getSiteStructure() );
        }
        return $struct;
    

    如果未从缓存中提取导航,则导航工作正常。是的,显而易见的解决方案不是缓存Zend_导航,但构造函数在构建其内部表示方面做了大量工作:尽可能多地使用预先计算的内容进行缓存是有意义的。。。

    我仍在试图看看混乱的结果是否有规律。树中没有循环/循环。

    3 回复  |  直到 16 年前
        1
  •  1
  •   X-Istence    16 年前

    看完这个问题后,我快速地瞥了一眼 Zend_Navigation 代码,使用序列化缓存它似乎不应该有任何固有的问题。但是,通过查看Zend_导航文档,我发现了以下内容:

    方法将容器及其页面转换为数组。这对于序列化和调试非常有用。 - Zend Navigation Containers: Other

    此外,如果可能的话,向Zend Framework维护人员提交一份bug报告,以便他们可以查看它。

    Zend_导航 Zend_导航 使它变得缓慢而笨拙。许多使用Zend框架的开发人员已经找到了实现相同目标的其他方法。

        2
  •  1
  •   Lionel Gaillard    14 年前

    toArray() ,并希望简单地使用 setPages($pagesFromCache)

    小心, Zend_Navigation_Page_Mvc::isActive() isActive() 当前MVC页面的 仍然返回真值 ,即使你打过电话 setActive(false)

    我发现停用所有页面的唯一方法是递归遍历生成的数组:

    $pages = $navigation->toArray();
    
    array_walk_recursive(
        $pages,
        function(&$item, $key)
        {
            if($key === 'active')
                $item = false;
        }
    );
    
    $cache->save($pages, 'pages');
    
        3
  •  0
  •   cdeszaq Sudhir N    14 年前

    拯救 Zend_导航 toArray() .

    我同意,随着导航对象的增大,它可能变得相当笨拙;尽管我必须在代码中进行更深入的挖掘,以完成我对尺寸临界点的理解。

    推荐文章