昨日はmoreの日本語化を書いた。
「続きを読む」をクリックする都度、AjaxでDB問い合わせしていたので、
1度読み込んだ記事はキャッシュしておこうというハックです。
◆ajaxified-expand-post-now.php
160行目付近
// キャッシュ用配列[追加]
cacheMore = new Array();function fetchLoading() {
// キャッシュ無しか?[追加]
if( ! cacheMore[ 'viewBox-'+postID ] ) {
// 従来の問い合わせの処理[従来]
wH(gE('viewBox-'+postID), '$aepnLoadingMsg');
}
}function fetchDone(outcome) {
// 結果表示の処理[従来]
wH(gE('viewBox-'+postID), outcome);
// キャッシュ保存[追加]
cacheMore[ 'viewBox-'+postID ] = outcome;
}
そんなに何度も展開したり折りたたんだりする人はいないと思うが、サーバが重いので少しでも負荷軽減。
onLoad時にキャッシュしておければ、効果絶大。
→ そのうち対応
7 comments
ほんとだ。2回目以降は速くなったね。
これはちょっと気になってたんだぁ。。。
でもさぁ、これってクライアントサイドのJavaScriptで出来ないの?
↑言ってる意味判る?何て言ったら良いか判らないので…
要は最初のアクセスで全文読んでおいて、続きを読む>>でScript動かして表示すればよくない??
技術的にはおもしろ味は無いかもしれないけど、その方が待たずに済みます。
言うとおり何度も展開したりしないから、やっぱ最初の1回が遅いのは気になるなぁ~。。。
さすがな細かい対応ですね。
onLoad時にやってしまうと、Ajaxの意味が全くなくなってしまいますから、
現状がベストな機能な気がしてます。
> 言うとおり何度も展開したりしないから、やっぱ最初の1回が遅いのは
> 気になるなぁ~。。。
だよね。なので
「onLoad時にキャッシュしておければ、効果絶大。
→ そのうち対応」
なわけです。(たぶん記事の末尾行が見にくいんだよね。)
> さすがな細かい対応ですね。
そういっていただけるとうれしいです。
> onLoad時にやってしまうと、Ajaxの意味が全くなくなってしまい
> ますから、現状がベストな機能な気がしてます。
ま、広義にはAjaxと考えてますよ。
やっぱり先読みが理想です。
※根本対策をするなら、AjaxではなくPHPでってことでしょうけどね。
先読み対応してみました。
ハック方法は例によって、あとでまとめますが、
サーバが非力なこともあって、先読み完了に(体感で)20秒近くかかる・・・
デバッグでは完了時にalert出してましたが、かろうじてステータスバーに「’Read More’ data is Preloaded !!」と表示するようにしました。
メッセージを確認してから、「続きを読む」をクリックしてください(^^;
大々的にキャッシュ化する必要性をひしひしと感じます。
か、せめて先読み完了するまでは「続きを読み込み中…」にするとか A(^^;
それと、
IEの場合、なぜかヘッダ画像が1度表示された後に再読み込みになってしまう弊害を確認しています。
> 「onLoad時にキャッシュしておければ、効果絶大。
> → そのうち対応」
> なわけです。(たぶん記事の末尾行が見にくいんだよね。)
あー、なるほど。そーゆー意味だったのね。すまん。
> あー、なるほど。そーゆー意味だったのね。すまん。
で、どですか?
20秒近く待たなきゃいかんのは、ナンセンスなんだけど、
一応onLoadに対応してみたぞ。
いやーしかしAjaxたる所以なんだが、複数のmoreテキストが非同期に
戻ってくるので、http_requestの配列化を思いつくまでは、
交通整理に悩んだ。
根本を翻すようだが、JavaScriptの配列かhiddenのdivにonLoadではなく
初めから書き出すしか無いのかとまで・・・
全然気にならなくなりました。
だって、続きを読む>>のところまで読むのに20秒くらいかかるでしょ。
それに、その間他の日記の分も読んでるみたいだから、
そこまで行き着く頃には1回目からサクサク動くようになってるね!
By submitting a comment you grant typista a perpetual license to reproduce your words and name/web site in attribution. Inappropriate and irrelevant comments will be removed at an admin’s discretion. Your email is used for verification purposes only, it will never be shared.