コンポーネントビューでJoomlaのキャッシュを使用するにはどうすればよいですか?


12

通常CMSの場合と同様に、ほとんどのヒットはまだ「新しい」間に発生します。ページ出力を生成するために必要な重いワークロードを減らすために、ページ出力を特定の期間に初めてレンダリングするときにキャッシュしたいと思います。

私はJCacheのドキュメントから作業してきましたが、基本的な仕組みは次のように解決されました。

$cache = JFactory::getCache('MyCache', '');
$cache->setCaching(true);
$cache->setLifeTime(86400);  //24 hours
$cache_id = 'MyCache_page_123';
$cached_page= $cache->get($cache_id);
if (!empty($cached_page)) {
    $the_page_output = $cached_page;
}else{
    $the_page_output = ...<div>the generated view HTML</div>....
    $cache->store($the_page_output, $cache_id);
}
// echo or return "$the_page_output"

キャッシュをどこに作成するべきか、そしてすべての作業が再開される前にそのキャッシュを使用するための「スイートスポット」を決定することを試みて立ち往生しています。

回答:


8

これまでのGoogle検索では、次の例のようにコントローラーの表示メソッドに追加display(true,...)すると、joomlaはコンポーネントを自動的にキャッシュすると推測しています
この例には、動作しているかどうかを確認するための測定コードも含まれています(JProfiler部分)。

public function display($cachable = false, $urlparams = array()) {
    $profiler = new JProfiler();//debug

    //Joomla cache only takes format, option, view, layout, tpl, language en id als default cache_id ($urlparams)
    $input  = new Jinput;
    $urlparams['comp_page_specific_id']=$input->getUInt('comp_specific_id');
    $urlparams['comp_page_specific_else']=$input->getUInt('comp_page_specific_else');

    parent::display(true, $urlparams);
    JFactory::getApplication()->enqueueMessage($profiler->mark( ' seconds with caching<br>Only works after someone has visited this page at least once.<br>Can be reset in backend.' ));//debug
}
  • あなたは、する必要が手動で設定$urlparamsコンポーネントビュー(異なるキャッシュ必要があるか定義するurlparams =のcache_idいわば)を。また、Joomlaは、フォーマット、オプション、ビュー、レイアウト、tpl、言語en idなどの一般的なパラメーターをすでに処理しています。

  • また、コンポーネントでは更新が行われないことに注意してください。モデルにヒットカウンターがある場合、キャッシュされたビューが表示されるときにヒット数は一定のままです。

*追加情報:joomlaライブラリのコントローラーでは、次の行がビューキャッシュを呼び出し、同時にキャッシュを設定します(まだ設定されていない場合)。
$cache->get($view, 'display'); //689: legacy controller

(2015-01-14の編集:urlparamsを追加)
(2015-01-15の編集:コードの追加情報を追加)


but I can't find any core joomla code where the cache is being set.ただのメモ-それは$cache->getメソッドの中にあります
ドミトリーRekun

うわー!それは非常に賢いコーディングです。情報をありがとう。答えを更新します。
e-motiv

答えが完全であることを確認するために、ここにあります
ドミトリーRekun
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.