ページ 11

スニペットのキャッシュ機構

Posted: 2015年2月18日(水) 18:43
by iwa
-----
ご利用のサーバ:
MODXのバージョン:1.0.14J-r9-rc2
PHPのバージョン:5.4.16
MySQLのバージョン:5.5.40-MariaDB
ブラウザ:
-----

こんばんは。

MODX Evo においてのスニペットのキャッシュ機構を解説している
ページ、ソースの場所でも構いませんので、教えてください。

特に以下のような情報があると助かります。

* 保存場所
* ライフタイム
* キャッシュデータを特定する仕組み

Re: スニペットのキャッシュ機構

Posted: 2015年2月18日(水) 18:53
by iwa
自己解決したかもしれません。

snippet.siteCache.idx.php がキャッシュの実態であれば、スニペットで取得、または生成したデータをキャッシュするのではなく、
スニペットのコード自体をキャッシュをすることをスニペットのキャッシュであると理解できます。

スニペットで生成データを管理するキャッシュ機構が別にあれば、うれしいのですが。。難しそうです。

Re: スニペットのキャッシュ機構

Posted: 2015年2月18日(水) 19:00
by yama
https://github.com/modxcms-jp/evolution ... .php#L1637
ここをキャッシュすればいいだけなので、実装は難しくないと思います。具体的にどのような用途を考えてますか?

Re: スニペットのキャッシュ機構

Posted: 2015年2月18日(水) 21:10
by iwa
yama 様

ポインタを教えていただき、ありがとうございます。

6万件程度のリソースを保持したサイトの構築を検討しております。
リソースの数も多いのですが、各ページでの条件が複雑な、相互参照の htlm を大量に生成しなければならずパフォーマンスを気にしている状態です。
最初は html に export することも考えたのですが、量が多いので現実的ではなくなり、さらに、ditto などの pagination が必要になり、
パフォーマンスの担保について考えておりました。

そこで、ひとつの方法として、スニペットと、そのパラメータからハッシュキーにして、そのキーをもとにキャッシュできればと思った次第です。
キャッシュのストレージはファイルか、memcached などで考えています。

いただいた URL をもとに検討をして見ます。ありがとうございました。

Re: スニペットのキャッシュ機構

Posted: 2015年2月18日(水) 22:04
by yama
MODXのキャッシュ機構は他のフレームワークと比べると独特で、たとえばライフタイムという考え方がありません。サイトを更新するたびに全てのキャッシュ情報を初期化する、かなり割り切った作りになっています。そのおかげで、キャッシュ機構に起因する副作用が生じにくいというメリットがあります。キャッシュデータの特定は、基本的にはリソースIDとの紐付けで引っ張ってきます。
今回のようなお話だと、スニペットを実行するタイミングで呼び出せるシステムイベント(WordPressでいうフックのようなもの)を新しく作れば、そのタイミングで、ユーザさんが独自に開発したキャッシュ機構をコア改造なしでプラグインで呼び出すことができるのではと思います。

Dittoを使っているとのことですが、Dittoはデータベースのクエリ一発で必要なデータを引っ張ってくる作りにはなってなくて、まず全てのデータをどっさり取り寄せてからPHPレベルでSQLのselectクエリみたいなことをするので・・・リソース数が多いサイトだと相当に処理が重くなると思います。そのへん、Dittoの後継として開発が進んでいるDocListerはよく考えられているみたいです。

Re: スニペットのキャッシュ機構

Posted: 2015年2月19日(木) 09:42
by iwa
yama 様

丁寧な解説をいただき、感謝しております。

まずは、DocLister(ロシア語?のドキュメントしかなさそう) を試してみて、次に plugin 等で対応を検討してみます。

ありがとうございました