2

アプリのデータベースが 100 Gbs を超えたばかりで、すぐにクラッシュします。

CListView の最初の結果ページを静的ページに置き換えることができれば、保存できます。

サーバーが静的ページを印刷する方が簡単です。また、必要に応じて毎日、静的ページを簡単に再生成できます。

可能であれば、ClistView を変更して目標を達成する方法がわからないため、コードはありません。

メモリ割り当てを使用すると、答えが見つかります。

メモリを扱う方法を知っている人には、SENTINEL という用語があります。

新しいデータをキューに追加するとき、データの正しい位置を見つけて挿入します

センチネルを使用すると、キューに常に少なくとも 2 つの要素が存在します。

これは私が達成する必要があるものです

clistview の最初の要素の前にセンチネルを配置する必要があります

clistview を操作する必要があります。静的ページを使用して、clistview の最初のページを設定したいだけです

おそらく、ページネーションは 40 要素に設定され、私の静的ページは 1 ページあたり 1000 になります

しかし、ユーザーがページ 2 または 3 または 4 にヒットすると、clistview は次の 40 ページをリストする必要があります

ページ 2 では、実際には、clistview は最初の実際の結果をリストします。すべてが右に押し出されます

4

2 に答える 2

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 に答える
2

のページ インデックスによって変化するページ キャッシングを使用できます。CListViewもちろん、これは静的ページを返すほど高速ではありませんが、パフォーマンスを大幅に向上させることができます。

アップデート

最初のページへのリンクを置き換えるために、 CLinkPagerのcreatePageUrlメソッドをCListViewオーバーライドできます。

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

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

pagerプロパティを次のようにCListView設定して使用します。

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