読者です 読者をやめる 読者になる 読者になる

AutoPagerizeを軽量化するアイデア

AutoPagerize

先に結論を言うと、AutoPagerizeは拡張版がオススメです。以下その理由と余談的なお話です。
拡張版のAutoPagerizeについてちょっと勘違いしてました。AutoPagerizeは軽量化できるという話に路線変更します。

AutoPagerizeってのは、次のページを今見ているページの下に継ぎ足して、ページ遷移することなく次のページを見ることができる、ブラウザの機能を拡張するスクリプトです。

このAutoPagerizeは派生スクリプトがたくさんあって、FirefoxだけでみてもGreasemonkey版のAutoPagerize(本家)、cho45さんのjAutoPagerize、Add-onAutoPagerize(本家)、AutoPager(作者は日本人ではなく、どちらかというと非日本語圏向けかも)などなど。他にもかなりの数があります*1
で、OperaGoogle Chrome 3、Safariでは拙著のoAutoPagerize(ユーザースクリプト)があり、開発者向けのChrome4ではAutoPatchWorkとAutoPagerize(本家)があります。

これらを大きく分けるとユーザースクリプト系と、拡張系に分けることができます。
ユーザースクリプト系はこれまで使われてきた実績があり、他のユーザースクリプトとの連携が充実していたりと、シェアが最も大きいです。
対して、拡張版のAutoPagerizeは本家版が今年の7月末に公開されたばかりで、まだ実績は少ないですし、ユーザースクリプトとの連携も十分ではありません。

じゃあユーザースクリプト版を使えば良いのかというと、ユーザースクリプト版は結構リスキーなところがあります。
AutoPagerizeには「次のページのリンクの位置」、「次のページの内容の位置」という情報と「そのルールが適用されるURL」の主に3つの情報(これらをSITEINFOと呼んでいる)が必要です。このSITEINFOは現在はwedataというサービスで管理されているのですが、(AutoPagerizeが実際に使用する部分に絞り込んでも)400KB弱の大きさがあります。
ユーザースクリプト版のAutoPagerizeは、400KB近いテキストデータをページを読み込むたびに解析・実行(eval)しています。これはoAutoPagerizeも動作としては同じです。もし、インラインフレームが10個あったら、1ページ表示するだけで合計11回も…。いくらブラウザのエンジンが高速化されても、増える一方のSITEINFOとのいたちごっこです。
実際、oAutoPagerizeがメモリリークしてるという意見もちょくちょく目にします。検証してないので実際のところはなんとも言えないのですが、現在の実装を考えるにその可能性は十分過ぎるほどにあります。

そこで、拡張版です。拡張の機能を使えば、SITEINFOを毎回evalすることなく、オンメモリで処理することが可能です。実際、Chrome ExtensionのAutoPatchWorkは、低メモリであることがChromeのタスクマネージャで確認できています。(具体的には、バックグラウンド側にURLを渡して、それにマッチするSITEINFOだけをページ側に返しています。)

というわけで、AutoPagerizeは拡張版がオススメ、といえます。

Firefoxは拡張でなんでもできるので今後の更新に期待しましょう。
Operaは…、お気の毒です。Opera Uniteを待ちましょう
Safariはプラグイン版の登場を待ちましょう。
ChromeはChrome4のbeta版を待ちましょう。

*1:変り種としては、userChrome.js用の[http://hinano.jottit.com/owatapagerize:title]とか