CodeIgniter アプリの内部から API 呼び出しをキャッシュする方法を改善できるかどうかを知る必要があります。現在の方法は、hmvc パターンで次のようになります。
- コントローラ
HOME
== への呼び出し => モジュールapp/application/modules/apis/controllers/c_$api
== ライブラリをロード =>app/application/libraries/$api
==> ライブラリはモジュールの controller_X に応答を返し、コントローラはそれが持っているデータでビューを呼び出します
// 注: 私のアプリは twitter api を使用していませんが、他のアプリは使用しています。
モジュールの内部でapis
は、次のようにすべての apc キャッシュが発生しています。
// Load up drivers
$this->load->library('driver');
$this->load->driver('cache', array('adapter' => 'apc'));
// Get Tweets from Cache
$tweets = $this->cache->get('my_tweets');
if ( ! $tweets)
{
// No tweets in the cache, so get new ones.
$url = 'http://api.twitter.com/1/statuses/user_timeline.json?screen_name=gaker&count=5';
$tweets = json_decode(file_get_contents($url));
$this->cache->save('my_tweets',$tweets, 300);
}
return $tweets;
この記事で説明されているように: http://www.gregaker.net/2011/feb/12/codeigniter-reactors-caching-drivers/
だから私は疑問に思っていました:
ホーム、クエリ、結果の 3 つのシナリオがあります。各モジュール
apis
のコントローラーで、すべてのシナリオで各コントローラーにキャッシュを実装することをお勧めしますか? 例://for each api1, api2 ... apiX, apply this: //home $this->cache->save('api_home',$api_home, 300); //query $this->cache->save("api_$query", $api_{$query}, 300); // I don't know for sure if $api_{$query} works or not, so don't hang me because I haven't tried it. //result $this->cache->save("api_$queryId", $api_{$queryId}, 300);
API呼び出しをキャッシュしましたが、同じ3つのシナリオ(ホーム、クエリ、結果)で、APIモジュールコントローラーを呼び出しているコントローラーに結果をキャッシュする必要があると思いますか? そのようです:
//modules/{home,fetch,article}/controllers/{home,fetch,article}.php //home $homeData['latest'][$api] = modules::run("apis/c_$api/data", array('action'=>'topRated')); $this->cache->save('home_data', $home_data, 300); //query $searchResults[$api] = modules::run("apis/c_$api/data", $parameters); $this->cache->save("search_results_$query", $search_results_{$query}, 300); //article page $result = modules::run("apis/c_$api/data", $parameters); $this->cache->save("$api_article_$id", ${$api}_article_{$id}, 300);
それで、あなたはどう思いますか?それは上記の良い習慣ですか、それとも単にひどくばかげたものですか?
//注意してください、提案されたキャッシングのアイデアはテストされていません...そのため、うまくいくかどうかはわかりませ${$api}_article_{$id}
ん(うまくいくと思いますが)