うちのMODxが激重い理由
たいしたCSSでもないのに、なんでこんなに重いのか疑問だったんですが。疑問が解けました。
そう、確かにCSSのせいではない。表示は早いんだから。ページもサクサク動くし。ただ、アクセスした後しばらく間があって一気にばっと現れる。なんで?テーブルの入れ子なんかしてないのに(ってかつかってねーよ 笑)。。いや、IEで見てもFFで見ても遅いんです。。
しかもキャッシュしてるにもかかわらず、次にアクセスしたときも同じ遅さだ。「TemplateSwithcer」の罠(笑)だって回避している。
で、原因のひとつはわかった。とても情けない理由だ。(笑)
それはいくらページでキャッシュ可にしていても、スニペットコールの書式がキャッシュ不可になっていたら、そこで出力される動的データはキャッシュされないのだ。。ということを身をもって知った。(笑)。
そんなわけで、可能な限りスニペットコールはキャッシュ可の書式に。
- [[スニペット名]]…キャッシュ可
- [!スニペット名!]…キャッシュ不可
結果は。。う?ちょっと早くなったかな。2回目以降のアクセスでは。。でも重い。何でこんなに重いのだろう。。?
もう一つの原因は。。
CSSを動的制御していたせいだった。MODxは、CSSだろうがナンだろうが(たぶん)、ドキュメントと同じように管理できる。これがウリのひとつなわけなのだが。確かにドキュメントとしてCSSを管理していれば、CSSの中にチャンクなんかも書けるので便利なんだが、しかし。表示が遅い。そのせいで。。
遅いのは許せない。ていうかコレ。サーバーに負担かけてるよね。レンタルサーバーではしない方が無難かも。MTでも、CSSは自動再構築の対象から外しているのだ。
ということで、実体化(ファイル化)して、読み込ませることにする。別に大変ではない。もともとローカルに作ってあるのだし。それをFTP(とかMODxのファイル管理でもよし)でアップロードして、htmlからの参照パスを変えれば良いだけだ。
お、おおお?早くなったぞ。やはりこれが大きかったか。。ハックしてるせいでCSSファイルが6つにもなってるからなあ。。ちなみに、CSSファイル一本なら、そんなに遅くはないのよ。ねん。。てなわけで、ブラウザ別対応を考えないなら、一本化してCSSの動的制御は良いだろう。
それともう一つ。メニューを書き出すスニペットでWayfinderってのがあるのだが、これのパラメータを指定するのに「UltimateParent (これもスニペット)」を使って親ドキュメントのIDを書き出させているんだけど、これがだ。Wayfinder側をキャッシュ不可の書式で書かないとsqlエラーを起こす。
どぉいうことかというと。
[[wayfinder? startID=`docid`]]
が基本書式なワケなんだがコレを
[[wayfinder? startID=`[[UltimateParent]]`]]
と書くことによってカテゴリごとにテンプレを変えなくてすむ。やったーっ。天才ジャン(爆)と思ったんだけど、この書式だとSQLエラーが出てMODxがとまるのよねん。。
そんなわけで、
[!wayfinder? startID=`[[UltimateParent]]`!]っていう方の書式を使わないとならない。これなら正常に動作する。でも、おかげでwayfinderが書き出すメニューがキャッシュされず、次回のアクセス時にも同じだけ時間かがかかる。
ということでなんとか[[wayfinder]]の書式で書き(これだと早いんです!(笑))、しかも、カテゴリごとにテンプレを変えなくてすむ方法を別に考えなくてはならない(たぶんテンプレート変数を使ったらできそうな気がしている。でも試してみないとわからん)。
やっばり、表示はさくさく早めが基本です。(笑)
サイト内関連記事:重いと思ったらキャッシュを疑え
