我的应用程序数据库刚刚超过100 Gbs,很快就会崩溃。
如果我可以用静态页面替换CListView的第一个结果页面,我可以保存它。
服务器更容易打印静态页面。我可以根据需要每天轻松地重新生成静态页面。
没有代码,因为我无法弄清楚如何修改ClistView以达到我的目标,如果可行的话;
使用memmory分配时会找到答案;
对于那些知道如何使用memmory的人来说,有一个术语SENTINEL
将新数据添加到队列时,您已找到数据的正确位置,然后将其插入
通过使用哨兵,队列中至少有2个元素
这就是我需要达成的目标
我需要在clistview的第一个元素之前放置一个哨兵
我需要操纵clistview;我只想用我的静态页面
设置clistview的第一页也许分页将设置为40个元素,而我的静态页面将每页有1000个
但是当用户点击第2页或第3页或第4页时... clistview应列出下一个40
对于第2页,实际上,clistview将列出第一个真实结果;一切都被推向了正确的
答案 0 :(得分:2)
您可以使用page caching改变CListView
的页面索引。当然,这不如返回静态页面那么快,但可以显着提高性能。
<强>更新强>
要替换CListView
中第一页的链接,您可以覆盖createPageUrl的CLinkPager方法:
<?php
class StaticLinkPager extends CLinkPager
{
public $firstPageUrl;
protected function createPageUrl($page)
{
if ($page == 1)
return $this->firstPageUrl;
return parent::createPageUrl($page);
}
}
并将CListView
设置为pager属性并将其用于:
array(
'class' => 'StaticLinkPager',
'firstPageUrl' => '/list-view-first-static-page.html'
)
答案 1 :(得分: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个查询来获取项目计数。只要您为“静态”内容呈现分页,就无法避免这种情况。