2

Yii php フレームワークを使用して分類された Web サイトを構築しました。現在、多くのトラフィックが発生しています。そのため、キャッシュを使用して Web サイトのパフォーマンスを最適化したいと考えています。

最適化したいコントローラーが 2 つあります。

1 つはスレッド リスト コントローラーです: (例) http://www.shichengbbs.com/category/view/id/15

もう 1 つはスレッド コントローラーです: (例) http://www.shichengbbs.com/info/view/id/67900

私がやった事:

  1. スレッドリストは 3 分間キャッシュされます (他のオプションは、新しいスレッドが来たときにのみスレッドリストを更新することです)。

  2. スレッド ビューの最終更新時刻 HTTP ヘッダーを設定します。(一部のユーザーは、編集後にページが変更されていないように見えると不満を述べているため、有効期限は設定されていません)

  3. カテゴリ ナビゲーション フラグメントの部分的なキャッシュ (すべてのページの左側に表示されます)

  4. htaccess を使用して、img/html/css/js の有効期限ヘッダーを設定します。

  5. スレッド リストのデータベース sql キャッシュを検討しましたが、実行していません。やはり1と同じですね。

ウェブサイトのパフォーマンスを改善するために他に何ができますか?

4

2 に答える 2

5

パフォーマンス チューニング ガイドのポイント 1 と 3は完了していると思います。非常に役に立ちます。

2番については、 CHttpCacheFilterを使用できます

class CategoryController はコントローラを拡張します {

   プライベート $_categoryLastUpdate;
   パブリック関数フィルター(){
      配列を返します(
         配列(
           'CHttpCacheFilter + ビュー',
           'cacheControl' => "max-age=604800、再検証が必要",
           'etagSeedExpression' => 関数() {
             $this->getCategoryLastUpdate(); を返します。
           }
           'lastModifiedExpression' => 関数() {
             $this->getCategoryLastUpdate(); を返します。
           }
         )
      )
   }

   public function actionView($id){
      $object = Category::model()->findByPk($_GET['id']);
      $this->render('view', array('object' => $object));
   }

   パブリック関数 getCategoryLastUpdate(){
      if (!isset($this->_categoryLastUpdate)){
         $obj = Category::model()->findByPk($_GET['id'], array('select' => 'lastUpdate'));
         $this->_categoryLastUpdate
      }
      $this->_categoryLastUpdate を返します。
   }

}

基本的には、ETag と LastUpdate をカテゴリ別に計算します。クエリを保存するにはlastUpdate、まずCategoryオブジェクトの のみを計算します。

まず、いつでもCCacheDependencyを使用できます。スレッド リスト オブジェクトにフィールドを作成するだけlastUpdateです。新しいスレッドが送信されたら、フィールドを更新して CCacheDependency に使用します。

非常に大きなページネーションを使用しているようですので、ページ分割されたディスプレイを最適化する 4 つの方法についてお読みになりたいと思います(データベースとスレッドの検索/リストに MySQL を使用している場合)。

于 2013-02-22T08:48:57.317 に答える
0

Memcache または APC でキャッシュ マネージャーを使用してみてください。例: http://code.google.com/p/memcache-flag/。リストを編集するときに、キャッシュ アイテムまたはタグを無効にすることができます。設計が単純な場合は、通常の APC / Memcache 関数でも実行できると思います (キーを設定し、有効でなくなったら削除します)。

これを使用して、mysql からデータを取得する代わりに、シリアライズされた (または自動的にシリアライズされた) データを保存します。

于 2013-02-22T01:20:56.450 に答える