monolithic kernel

アドレスバーでPinboardをインクリメンタルサーチ

March 13, 2012

    今話題沸騰のPinboardを検索するための拡張を書きました。アイデアはこちらの拡張の丸パクリです、すみません。

    こんな感じで検索できます。

    ダウンロード

    使い方

    拡張をインストールし、ログインが完了した状態でロケーションバー(Omnibox)にp、半角スペースの順で入力すると、以下のような表示に切り替わります。

    Pinboard

    このまま検索したい語句を入力すると、自分のPinboardを検索できます。

    Pinboard

    検索結果は5件だけ表示されるので、それ以降を表示したい場合は末尾に.(半角ピリオド)を打ち込んでください。ピリオドの数に応じて2ページ目以降が表示されます。

    Pinboard

    細かい仕様

    ブックマークはローカルにキャッシュされ、検索は完全にローカルで完結しています。キャッシュはだいたい1時間に1回くらい更新されます。更新に失敗した場合は失敗した回数*5分(最大60分)待って再試行します。

    キャッシュはlocalStorageに保存しようと思ったのですが、数万件のブックマークを格納するには容量制限が厳しいのでIndexedDBを利用しました。

    IndexedDBはJavaScriptのオブジェクトをそのまま格納できるいかしたDBなのですが、まだ仕様が固まっていないのであまりおすすめできません。しかし、Chrome拡張で大量のデータを扱おうとすると、オワコンになったWeb SQL Databaseか仕様が固まっていないIndexedDBの二択を迫られるので仕方なく採用しています。

    IndexedDBにはインデックスを張って検索、カーソルを辿りながらデータを取り出す、といった機能があるのですが、今回の目的(大文字小文字を無視した部分一致AND検索で複数のプロパティのうちどれか1つでもマッチするものを取り出す)を実現する方法がさっぱり分からなかったので、IndexedDBはただの入れ物にしてしまい、実際の検索は配列を舐めながら正規表現マッチで行っています。すごく無駄な感じがしますが、体感速度は十分に速いので満足してます。