CodeIgniterのキャッシング機能の比較ページでも説明したCodeIgniterのキャッシングクラスの欠陥であるキャッシュファイルのフォルダ分けの改善策についてです。

Linux(リナックス)では1フォルダ内に1万個以上のファイルを入れることができますが、5000個を超えた辺りでパフォーマンス速度が急激にダウンします。

アクセス数が非常に多いサイトやキャッシュを細かく分ける必要があるサイトなどでは、キャッシュファイル数5000個というのはそんなに低い数値ではありません。高パフォーマンスを維持するためには、1フォルダ内のファイル数が5000個以下になるようにフォルダ分けする必要があります。

しかし残念ながら、CodeIgniterのキャッシングクラスには、このような自動フォルダ分け機能が備わっておりません。

そこで対応策を考えてみました。といっても、動的にキャッシュフォルダを指定するという単純なものです。

STEP 1 : コントローラのコアクラスを拡張

公式マニュアルのコアシステムクラスの作成を参考に、coreフォルダ内にMy_Controller.phpファイルを作成し、コントローラのコアクラスを拡張します。

STEP 2 : コアクラス内でキャッシュフォルダを動的に設定

コアクラスのコンストラクタ内に次のように記述します。

$this->config->set_item('cache_path', dirname(dirname(__FILE__)) . '/cache/' . $this->uri->segment(1, 0) . '/' . $this->uri->segment(2, 0) . '/' . substr(md5(current_url()),0,1) . '/' );

以上です。

 

PR