http://japan.nucleuscms.org/bb/viewtopic.php?p=12271#12271
マルチカテゴリープラグインにキャッシュ機能*1がついて、並び順やサブカテゴリまわりの不具合などを修正されたバージョンです。今はテスト版とのことなので、動的生成した場合は[D]の文字が付くようにされてるとのこと。
インストールの場合は上書きせずに、アンインストールした方がいいでしょう*2。そうしないとオプションメニューが最新化されませんでした*3。まぁ実用には問題なかったんですけれど。
以下に個人的に改造した点をメモしておきます。単純に個人的な嗜好で表示を変えただけなので、あまり気にしないでおいてください。バージョンアップした場合に備えて、未来の自分へのメモ書きです*4。
- 注1 : その記事がどのカテゴリに属しているか、という部分のキャッシュです。ここって意外に負荷がかかるらしいのです。
- 注2 : もちろんアンインストールの時はテーブルを削除しない設定にしてからにしましょう。
- 注3 : 具体的に言うと、一番下に表示されるTemplate cache functionが出ませんでした
- 注4 : 今回うっかりバックアップもとらずに上書きしてインストールした愚か者へ送る言葉。
$mcat_string = '<a href="'.$url.'">'.htmlspecialchars($this->_getCatNameFromID($item->catid)).'</a>'; ↓ $mcat_string = '<a title="Category" href="'.$url.'">'.htmlspecialchars($this->_getCatNameFromID($item->catid)).'</a>'; $extra_scat_string[] = '<a href="'.$surl.'">'.htmlspecialchars($name).'</a>'; ↓ $extra_scat_string[] = '<a title="Subcategory" href="'.$surl.'">'.htmlspecialchars($name).'</a>';
↑カテゴリ、サブカテゴリのリンクにカーソル持ってきたときに文字を表示させるように変更。それぞれ二箇所で計四箇所。
echo '[D]'.$cat_string; ↓ echo $cat_string;
↑キャッシュプラグインを使っている都合上、ログイン状態では毎回 [D] が表示されてしまうので削除。
echo '<label for="npmc_scat'.$aSub['scatid'].'">'.htmlspecialchars($aSub['sname']).'</label><br />';
↑管理画面のマルチカテゴリ表示を横に並べたかったので、<br />を消して全角スペースに変更。計三箇所。
こんな感じに横長にサブカテゴリが並びます。サブカテゴリの数が異常な多さの時にはいいかもしれません。
コメント
ver0402jのリアクション、はじめてです。(笑
結構ダウンロードされてるみたいなんですが、何だかトピックが静かで、どうなんでしょう?(←何が?w)
本家がマルチカテゴリ採用しそうな(Andyさんが提案されてるのかな)気がして(錯覚?)テスト版のまま、皆さまの様子をうかがっておりました。(汗
NP_MultipleCategories0402j_cacheのキャッシュ機能、そこそこ効果あるのではないかと思うのですが、ベンチマーク的にはどうでしょうか?
ちょっと仕事が切羽詰ってきたので、キャッシュプラグインをオフにして
[D]を復活させ、カテゴリー自身のキャッシュはオンにしてます。
つまり、他の人が見ても生成時間が分かるようにしました。
短時間でのベンチマーク的な印象を述べると、少し速くなってるかもしれない
とは感じました。ただ、同じページを表示させてるはずなのに
遅くなる時もあるので、それこそ千回レベルで計測テストしないとダメかも。
と言いますか、どこをキャッシュしてるのか、良く分かってないのです。
マルチカテゴリーなのにサイト表示の時のテンプレートをキャッシュしてるの?
とか思ってるのですが、コレって誤解してるでしょうか、やはり。
ベンチマークの記述を二箇所ではさんで正確に測ろうかと思ったのですが
上記の理由で、どこを挟んで計測すべきか分からなくて実践してないです。
もしかしたらカテゴリリストの表示のキャッシュかとも思ったんですが
カウントとる部分の関数を無効にしてる状態なので、そこも試してないです。
日曜はたぶん休めると思うので、その時にもうちょっと丁寧に
試してみようかと思ってます。すみません。
> 上記の理由で、どこを挟んで計測すべきか分からなくて実践してないです。
あー、そっかー、フォーラム読み返してみましたが、どこをキャッシュしているのか分かりにくいですね。すみません。^^;;;
あのトピックの最初の話題の、「そのアイテムが、どの(サブ)カテゴリに所属しているか」の表示部分です。
表示はあっさりしていますが、内部処理的には結構大変なので、意外とオーバーヘッドがかかるのです。
この記事では、タイトルの後の、
PC ( Nucleus )
の部分です。(動的に生成した時に[D]が付くところです。)
具体的な記述としては、テンプレートに、
<%Benchmark%>
<%MultipleCategories(1,name)%>
<%Benchmark%>
って感じですね。フォーラムにも追記しておきます。
> それこそ千回レベルで計測テストしないとダメかも。
そうそう。ページ全体を測定すると、いろんな不安定要素が重なるので、結構バラツキが出ますよね。
上記のように、テンプレ変数を直接囲むようにすれば、要素が1つになるので、バラツキはかなり小さくなると思います。
2〜3回測定すれば大丈夫かと思います。
キャッシュあり・なしを、比べるのが面倒かも。
ver0402jと、ver0402j_cacheは、キャッシュ機能以外全くの共通なので、NP_MultipleCategories.phpを上書きするだけでOKです。
> 日曜はたぶん休めると思うので、その時にもうちょっと丁寧に
> 試してみようかと思ってます。すみません。
いやいやいやぁ、いいんですよ。すみません。
いやね、気心知れた(?)嶽花さんにしか聞けないので、「ベンチマークどうです?」ってちょっと催促してみちゃいました。
なるほど、テンプレートでのカテゴリ名表示の部分のキャッシュなのですね。
だからフォーラムでテンプレートで可能なベンチマークをアップされてた、と。
合点がいきました。
で、試してみました。
トップページでの記事のカテゴリのところをベンチマークではさんでます。
1:キャッシュあり
[0.19sec.]PC[0.20sec.]
[0.28sec.]日記 ( 鬼嫁 )[0.28sec.]
[0.29sec.]PC ( Nucleus )[0.29sec.]
[0.30sec.]Web ( イラスト )[0.30sec.]
[0.31sec.]ゲーム ( NDS )[0.31sec.]
2:キャッシュオフ設定
[0.20sec.][D]PC[0.20sec.]
[0.26sec.][D]日記 ( 鬼嫁 )[0.27sec.]
[0.28sec.][D]PC ( Nucleus )[0.28sec.]
[0.29sec.][D]Web ( イラスト )[0.30sec.]
[0.30sec.][D]ゲーム ( NDS )[0.31sec.]
3:キャッシュなしバージョン
[0.19sec.]PC[0.19sec.]
[0.26sec.]日記 ( 鬼嫁 )[0.26sec.]
[0.27sec.]PC ( Nucleus )[0.27sec.]
[0.28sec.]Web ( イラスト )[0.29sec.]
[0.30sec.]ゲーム ( NDS )[0.30sec.]
あくまで目測で平均的な値を書いてる感じです。
雑感ですが、当サイトではキャッシュを検査する動作の分だけ
逆に遅くなってるように思えました(とはいえ、0.01秒レベル)。
なぜかと言うと、1ページに5件しかないからじゃないかと思います。
あと、思ってたほどMySQLが重くなかったのかな、と。
サーバによっては結果が本来の目的通りになるような気もします。
つまり、MySQLが重くて、1ページでカテゴリ表示が多くてその部分の
負荷が高いようなサイトだと効果があるのでは。
……って、書いたところで何となく佐藤(な)さんがこのプラグインを
開発されたきっかけが分かったような気がしました。
必要は発明の母、ってことでしょうか?
いやぁ、いつも詳細な検証をありがとうございます。
計測が小数点以下2桁単位なので、0.01秒の誤差はどうしても出ちゃいますね。これはしょうがないです。
なので、「3パターンの全てで、ほぼ同じ結果」と見ても良いかと思います。
使用するサーバが、ファイルアクセスと、データベースアクセスと、どちらが得意(←表現が難しい)なのかによって随分変わりそうですね。
それにしても、嶽花さんのとこ、キャッシュなしでこの処理速度は凄いですね。ビックリしました。(cache版の必要ないかと)
結局、フォーラムで書いた「アイテム1件につき0.02〜0.03秒の速度アップ」が得られるような遅いサーバはどれくらいあるんだろう??(笑
ということで、、、
NP_MultipleCategories0402j_cache版は、削除しようかと思います。(早くこの結論を出したかったんです。)
フォーラムでも書いたのですが、
同じ名前のプラグインで、必要以上に亜種が増えるのは本意ではないので、どちらか一方を残すつもりでアップしました。
元々、cache版は、「ここからは余分な話。。。」でしたので。(笑
と、いろいろお手数をおかけしたのに、、、
Nucleusのマルチカテゴリは、生まれ変わるような気が。。。(←まだ言ってる。笑)