2

我的应用程序数据库刚刚超过 100 Gbs,很快就会崩溃。

如果我可以用静态页面替换 CListView 的第一个结果页面,我可以保存它。

服务器更容易打印静态页面。而且我可以根据需要每天轻松地重新生成静态页面。

没有代码,因为如果可能的话,我不知道如何修改 ClistView 以达到我的目标;

使用内存分配时找到答案;

对于那些知道如何使用内存的人来说,有术语 SENTINEL

将新数据添加到队列时,您已找到数据的正确位置,然后将其插入

通过使用哨兵,您将始终在队列中至少有 2 个元素

这就是我需要实现的

我需要在 clistview 的第一个元素之前放置一个哨兵

我需要操作 clistview;我只想用我的静态页面设置 clistview 的第一页

也许分页将设置为 40 个元素,而我的静态页面每页将有 1000 个

但是当用户点击页面 2 或 3 或 4 ... clistview 应该列出下一个 40

实际上,对于第 2 页,clistview 将列出第一个实际结果;一切都被推到右边

4

2 回答 2

2

您可以使用因页面索引而异的页面缓存。CListView当然,这不如返回静态页面快,但可以显着提高性能。

更新

为了替换第一页的链接,CListView您可以覆盖CLinkPager的createPageUrl方法:

<?php
class StaticLinkPager extends CLinkPager
{
    public $firstPageUrl;

    protected function createPageUrl($page)
    {
        if ($page == 1)
            return $this->firstPageUrl;
        return parent::createPageUrl($page);
    }
}

并将其与CListViewpager属性一起使用:

array(
    'class' => 'StaticLinkPager',
    'firstPageUrl' => '/list-view-first-static-page.html'
)
于 2013-04-09T21:05:52.723 回答
2

从你的评论我猜你可能想要这样的东西:

<?php if($dataProvider->pagination->currentPage==0): ?>
    <?php /* 
       Render your static content + a custom CLinkPager here.
       Feed $dataProvider->pagination as 'pages' into the link pager.
     */ ?>
<?php else: ?>
     <?php /* Render your listview here */ ?>
<?php endif; ?>

正如我在上面的评论中所说,您仍然会看到 1 个查询来获取项目计数。只要您也为“静态”内容呈现分页,就无法避免这种情况。

于 2013-04-10T08:47:52.220 回答