みなさんこんにちは
GetFieldのデータベースへのアクセス回数が減る改造を施してみました。
しょぼい改造で、特定な条件下でのみパフォーマンスの向上が期待できます。
GetFieldの使い方によっては失速する場合もありますので、ソースを差し替えて加速するようなら使ってみてください。
1.改造対象
GetField V1.3 beta @2006-11-08
2.改造理由
GetFieldで個別にテンプレート変数を取得する場合、データベースのアクセスが嵩んで十分な性能が出ない場合がある。
3.改造論理
処理終了時にドキュメントIDとすべてのテンプレート変数をキャッシュし、次回呼び出された時にIDが同じであればキャッシュされた変数を返す。
GetFieldには親IDを指定する機能がありますが、そちらは未対応です。
データの保存領域には$GLOBAL(スーパーグローバル変数)を使ってます。気に入らない場合はstaticなどとしてください。
4.参考情報
4.1 加速ケース
・同一ドキュメントの変数をGetFieldをキャッシュなし([!GetField!])で複数回読み出してる場合
(同一ドキュメントの変数にアクセスする回数が多ければ多いほど効果が顕著になります)
4.2 同速/失速ケース
・GetFieldをキャッシュあり([[GetField]])で呼んでる場合
・複数のドキュメントの変数を交互に取得している場合
4.3 使用厳禁ケース
テンプレート変数に保存されたデータの”総量”が大きく、メモリ不足を招くような場合
5.適用方法
アーカイブ内のソースをassets/snippets/getfieldフォルダ配下に配置してください。
(オリジナルソースのバックアップを忘れずに)
6.ダウンロード
ベータ1 :
http://archive.modxclub.net/download.php?t=f&i=7
7.性能測定法
下のページの[^時間測定値^]をページのフッタにでも表示してください。(インストーラ付属のminimum_templateにもあります)
http://www.bodenplatte.jp/osscms/modx/modxtag.html