next_previous blockを置くとページ読込みが遅くなる現象について

2012年8月18日 at 2:16

next_previous blockを置いたページは、置かなかったページに比べて、ページ読込みに倍くらいの開きがある様なので、ご報告をと思いトピックを立てさせてもらいました。

ページリストブロックで10件表示したページより、next_previous blockを置いたページの方が重い様です。
どうもページの表示そのものよりも、このブロックがそのページにある事でサーバー側の処理に時間がかかっている様な感じです。
-サンプル(絵とか気にしないで下さい...)-
何も無し
http://aisoratei.com/log/testpage004/
ページリスト10件
http://aisoratei.com/log/testpage001/
next_previous
http://aisoratei.com/log/testpage003/

一応、時系列が重いのでは...と思ってサイトマップにしてみたりしたんですが、変わりありませんでした。(それから、view.phpのloder::helperがimageなのが問題なのでは...と思って何となくtextに変えてみたりもしましたが、当たり前のように意味はなく...)

はじめ、ロリポがいけないのかとも思いましたが、katzさんが紹介されていたサイトはとても軽く...
http://yuko-ota.com
そして自分のサイトと同じサーバーに別のconcrete5サイトを作ってみましたがそちらも軽く動作しました。
http://kizahashi.holy.jp/test-001/

...となると、もうこのブロックしかない感じで、よく考えたら自サイトはトップページ以外は全てこのブロックを使っていて、トップページだけは早くそれ以外は全てもっさりでした。

今までとてもこのもっさりに悩んで、helperのhtml.phpなどをいじってjsをすべてFooterOutputにしたり、サーバー借り直したり、cloudflareを使ってみたりと色々しましたが効果は少なく、最終的にnext_previous blockを外したページだけは処理が劇的に早くなりました。

めんどくさくても、ページ作成時に隣のページへの静的リンクを手打ちする方が良さそうです。(CMSの利点がだいぶ減りますが...)
自分はとりあえずこのブロックは外して、親階層への静的リンクを着けて、そちらのページリストに頼ろうかと思います。

ともあれ、なんとかこのブロックが軽くなってくれない物かとも思います。
とても重宝な良いブロックだと思いますし..。

それでは長文・乱文失礼しました。

追記:
Tags blockも同じレベルで表示が重くなりました。
この二つが合わさってすごい重さになっていた様です。
http://aisoratei.com/log/testpage005/
たしかに機能を使えば、単純に考えても重くなるのは当たり前なんですが、他のブロックに比べて重くなる割合が高いので一応トピックにあげさせてもらいます。
また、これらの現象はmampで作業をしていた時には、ほぼ感じていませんでした。
テスト環境の方が軽いのは当たり前かもしれませんが...。

気になったときの環境は以下です。
サーバー:ロリポップ(ロリポ/チカッパ)
バージョン:concrete5.5.2.1
ブラウザ:macのsafari / firefox / chrome

どちらもあると素敵な機能なだけに、もう少し軽くなって欲しいと思いました。
何か良いチューニング方法とかあれば、教えて頂けると嬉しいです。
では失礼します。

追記:2
環境を追記します。
フルページキャッシュ:有
APC:利用
Cloudflare:CDNのみ利用

タグ:

Re: next_previous blockを置くとページ読込みが遅くなる現象について

2012年8月18日 at 7:43
concrete5.5.2.1本家版のソースを読むと、PageList 取得して、
「1 ページずつ順に、次のページかどうかを判定する」
みたいです。

なので、ページ数が多くなれば処理が遅くなるはずです。
実際にページをたくさん作っての検証はしていないですが。

また、判定をPHPで行っているようですが、
「データベースから取ってくる時にソートして一件取得」
のほうがたぶん速くなると思います。
ただしこちらも未検証です。DB の構造によっては、かえって遅いかもしれません。

すぐに対処できそうなのは、
キャッシュ機能を使う
でしょうか。
前後のページが変わることは少ないとすれば、キャッシュすれば問題無い気がします。
 

Re: next_previous blockを置くとページ読込みが遅くなる現象について

2012年8月18日 at 12:22
とても早い返信をいただき、ありがとうございます。
なるほど、そう言う理由なのですね。
自分はソースコード読めないので、判定のお話を教えて頂けて、とても助かりました。
たしかに、サイトを制作したての頃はもっと軽快だったので、ページが増えると重くなると言うのは、その通りかもしれません。
なんとか軽くなるなら今後使っていきたいブロックではありますが...。

それから、キャッシュの方は、一応既にフルページキャッシュとAPCを利用しておりまして…。(情報が小出しになってしまってすいません。)
ただ、やはりこれらのブロックがあるページの表示には、キャッシュはされててもその毎に処理が行われている感じで、体感して遅いです。
なのでおそらく処理結果のURLをキャッシュしてる訳ではない様に思います。

それにしても、本当に1ページずつ判定のお話は助かりました。
謎が解けたおかげで気持ちが楽になりました。
ありがとうございます。
 

Re: next_previous blockを置くとページ読込みが遅くなる現象について

2012年8月19日 at 16:49
ブロックのコードを確認しましたが、どうもこのブロックはキャッシュされない様になっている様です。
ブロックののcontrollerに

protected $btCacheBlockRecord = true;
protected $btCacheBlockOutput = true;
protected $btCacheBlockOutputOnPost = true;
protected $btCacheBlockOutputForRegisteredUsers = true;

を追記すれば早くなると思いますよ
 

Re: next_previous blockを置くとページ読込みが遅くなる現象について

2012年8月19日 at 18:35
ありがとうございます。
next_previousを外すのは、泣いて馬謖を斬る心境だったもので、とても助かります。
早速付け加えてみたいと思います。
本当に感謝です。
 

Re: next_previous blockを置くとページ読込みが遅くなる現象について

2012年8月19日 at 14:06
一応自分の環境の範囲で結果をまとめて追記したいと思います。
下はサンプルで作ったページをまとめたリストのページです。
http://aisoratei.com/log/testpage000/

・何もないページは表示に2.1秒
・ページリストで10件を配置したページは表示に2.4秒
それにに対して
・next_previousを配置したページは表示に3.2秒

たいして時間変わらないかもしれませんが、表示される結果の量に対してはやや重く感じます。

そして
・Tagsを配置したページは表示に3.0秒
・Tagsとnext_previousを配置したページは表示に4.2秒

どちらもあるとページの行き来が楽になるのですがない時の倍かかるとさすがに辛さを覚えます。エディットモード時も更新の度に倍時間がかかりますし...。

格安のレンタルサーバーなので速度に文句は言えませんが、ここら辺の機能がもう少し軽く使えるようになったらと思いました。(本来サイトの構造や画面構成でなんとかすべきなんでしょうが...)

長々とすいませんでしたが、以上です。

もしブロックの設計が変われば、next_previousやtags等も、もっと早くなる物なのでしょうか。それともconcrete5のシステムの構造的に無理もあるのでしょうか。
それが可能であるならマーケットプレイスに望みを託せるのですが...。