FastladderよりLDRのほうが遅いのをなんとかしたいかも

↓こういう記事を読んだので。

LDRFirefoxで見て、ピンを開くのはOperaという変則的な使い方をしている。というのも、LDRはどうやらFirefoxに最適化されているらしく、スピードが速い。

Loox Uと初音ミクで行こう!: Opera9.63のAcid3と最近のLDRと操作性とつまり雑文ってことね。

やっぱ LDR は最初のロードがもっさりしてるのをなんとかしたいね。Fastladder のほうはまだサクサクと言えるのに。

そりゃ FastladderでLDRのクローラを使うGreasemonkey とかを作りたくもなるよね。(ならない)

というわけで、LDR を高速化すべく遊んでる。Opera 限定。

もしかしたら自分が北米にいるからこういう結果になるのかもしれないということを最初に書いておく。

ボトルネックを見つける

とりあえず Firebug でネットワーク状態を見ると、こんなふうになっている。

LDR Fastladder
読み込み完了時間 6.74秒 2.63秒

読み込み完了時間というのは右下に出る数字なんだけど、onload 発生までということでいいのかな?

最大のボトルネックはここっぽい。

これは LDR のソースでいうと一番下のこれ

</body>
</html>
<script type="text/javascript" charset="UTF-8" src="/js/compat.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/common.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/event.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/roma.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/template.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/api.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/ui.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/reader_proto.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/reader_common.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/reader_pref.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/reader_main.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/reader_manage.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/reader_widgets.0.3.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="/js/reader_addon.0.3.4.js"></script>

にあたる部分で、この部分は Fastladder だとこうなっている。

</body>
</html>
<script type="text/javascript" charset="UTF-8" src="/js/fl_aio.0.3.2.js"></script>
<script type="text/javascript">init();</script>

んでネットワークの状態はこんな感じ。

簡潔だね。

JavaScript ファイルは画像などと違って一度に複数を読み込んだりしないので、ファイル数が増えるとそれだけ遅延が激しくなる。

どういうわけか Fastladder のほうはファイルを繋げてくれてあるのに LDR のほうはしてくれてない。(バージョン違うのも気になるけど)

Opera的な対処法

実はちゃんとサーバーのほうには http://reader.livedoor.com/js/fl_aio.0.3.4.js というファイルは存在しているので、それを替わりに読ませるようにしてみる。

↓こういう UserJS を作ってインストール。LDR.js とでも名付ける。

// ==UserScript==
// @include http://reader.livedoor.com/reader/
// ==/UserScript==

opera.addEventListener('BeforeExternalScript',function(e){    
     if(!/fl_aio/.test(e.element.src))
     e.preventDefault();
},false);

document.addEventListener('DOMContentLoaded',function(){
  var s1 = document.createElement('script');
  var s2 = s1.cloneNode(true);
  s1.type = 'text/javascript';
  s1.charset = 'UTF-8';
  s1.src = '/js/fl_aio.0.3.4.js';
  s2.type = 'text/javascript';
  s2.innerHTML = 'init();';
  document.documentElement.appendChild(s1);
  document.documentElement.appendChild(s2);
},false);

これで正常にページのロードが終了するからおもしろい。(実は 'init();' のやつは無くてもいいっぽい。)

JavaScript のロード時間を Opera 10 alpha の Dragonfly に新しく付いた HTTP Inspector で見ると、処理前はこれ↓

プラスこれ↓

プラスこれ↓

だったのが、処理後はこの黄色背景の一行だけ↓

になった。(JavaScript のロードだけ見てるので、他に画像などもあることに注意)

ナニゲに広告スクリプト (/A-affiliate2/distribute というやつ) もブロックしている。

さらに変態的な対処法

ページの一番最後に script 要素があるんだったら、DOMContentLoaded (よりちょっとあと) で読み込まれる GM 互換 UserJS とほとんどタイミングが変わらないじゃん、ということで、fl_aio.0.3.4.js 自体を UserJS にしてみる。

さっきの LDR.js をこんなふうに書き換えて、

// ==UserScript==
// @include http://reader.livedoor.com/reader/
// ==/UserScript==

opera.addEventListener('BeforeExternalScript',function(e){    
     e.preventDefault();
},false);

それとは別に、http://reader.livedoor.com/js/fl_aio.0.3.4.js を手動でダウンロードしてきて、LDR.user.js というファイル名で UserJS フォルダに保存 (GM 互換にするため)。

フィアルを開いて、一番上に

// ==UserScript==
// @include http://reader.livedoor.com/reader/
// ==/UserScript==

とヘッダーを付けて、一番最後に

init();

と書く。(この init(); は必須っぽい)

なんとこれで正常にページが開く。おもろいね。

さらに?

これで LDRJavaScript ソースがほぼ全部ローカルから読まれることになったので、あとは手元のソースを修正して Opera に最適化するだけ。

例えば OperaだとlivedoorReaderがニュルっとするのでユーザースクリプトでなんとかするみたいなことを直接手元のソースで修正してしまってもいいね。

ヒマならやってみるかも。

つーか自分は実は Fastladder ユーザーなので、LDR が速かろうが遅かろうが別に気にしないのです。

現実問題、このソースまで弄ってしまうと LDR 側のアップデートに対応できなかったりするのであまりオススメしません


こんなのあった。

nowa 消えちゃうらしいのでこの記事だけ魚拓。