Home > Latest topics

Latest topics > 予定もしくは野望もしくは妄想

宣伝1。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

宣伝2。Firefox Hacks Rebooted発売中。本書の1/3を使って、再起動不要なアドオンの作り方のテクニックや非同期処理の効率のいい書き方などを解説しています。既刊のFirefox 3 Hacks拡張機能開発チュートリアルと併せてどうぞ。

Firefox Hacks Rebooted ―Mozillaテクノロジ徹底活用テクニック
浅井 智也 池田 譲治 小山田 昌史 五味渕 大賀 下田 洋志 寺田 真 松澤 太郎
オライリージャパン

予定もしくは野望もしくは妄想 - Apr 21, 2009

今の所、XUL/Migemoの辞書ファイルは全部普通のテキストファイルなんだけど、これをSQLiteデータベースに置き換えてみようかなと思ってる。メリットがあるのかどうかは分からないんだが。

現在の辞書周りは基本的にはplus7さんが作られた物を踏襲していて、起動時に全ての内容を読み込み、JavaScriptの普通の文字列としてオンメモリで保持しておくようになってる。でもこれだとFennecで動かすのって多分きついだろうなあ、とは思ってた。

どうなんだろう、SQLiteって関係ないデータはメモリに読み込まずにいてくれたりするんだろうか? Fennecのデフォルト設定を見た限りでは、履歴の保持日数はFirefoxと同じ90~180日となってるから、これを全部メモリ上に読み込んだらエラい事になるよねぇ。と考えると、必要最小限だけメモリに読み込むようになってる事を期待してると考えていいんだろうか? それとも、これは単にFennec開発陣がSQLiteを過信あるいはモバイルプラットフォームを甘く見てただけで、実は全部オンメモリになっちゃいますとか?

まあとりあえず実装するだけしてみて、それから考えてみよう……

……とりあえずやってみたけど、なんか、めさめさ重い……ちゃんと作ってないから単にどっかで無限ループしてるのかもだけど。しかしそれを抜きにしても、辞書が約4MBだったのがSQLiteにしたら9MBに膨れ上がってしまった。モバイルで使うなんてのはますます非現実的な領域だ。工夫しないと全然お話にならんね……

追記。もうちょっと進めてみたけど、余計泥沼に嵌ってる気がしてきた。バックエンドのSQLite化は無しだな、というのが現時点での結論ですわ。

分類:Mozilla > 拡張機能 > xulmigemo, , , , , , 時刻:23:40 | Comments/Trackbacks (4) | Edit

Comments/Trackbacks

no title

Bugzilla@Mozillaで探してみましたが、Fennecでの扱いはよくわかりません。
「必要最小限だけメモリに読み込む」みたいな高度なことをしていれば、検索に引っかかるはずなんですけどね。

ちなみに、
Bug 481986 - Loading bookmarks into the bookmark list is slow
というのがあります。現在ではRESOLVED FIXEDですが、バグが報告された2009-03-06の時点では、「Loading 50 bookmarks is taking around 20 seconds (on n810)」だったとか。

技術的なことは分かりませんが、実機のFennecでSQLiteを使うと、パフォーマンスの問題で苦労するのかな、と思いました。

Commented by Rockridge at 2009/04/23 (Thu) 06:17:07

no title

コードを誤読してるかもですが、transaction 使われてますか?
データ数が少ない内は使わなくても済みますけど、データ数が20とか30とかの時点でも、ちょっと凝ったことをやろうとすると transaction かまさないと使い物になりません。>SQLite

http://ichiro.maruta.googlepages.com/storage%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9
だと、executeSimpleSQL で "BEGIN TRANSACTION" と "END TRANSACTION" してますけど、
dbConnection.beginTransaction();
... // statement 実行
dbConnection.commitTransaction();
で良さそうです。

Commented by 池田 at 2009/04/23 (Thu) 14:22:05

no title

情報ありがとうございます。
トランザクションを使う方法で最初の辞書のインポートは解決できたんですが、辞書からのエントリの検索を効率よく行う方法を確立できてないというのが現状ですね……

Commented by Piro at 2009/04/23 (Thu) 17:58:45

no title

> SQLiteって関係ないデータはメモリに読み込まずにいてくれたりするんだろうか?

SQLite の場合、データベースファイル中の、読む必要のあるページしか読まないので、いきなり全部オンメモリになったりはしません。
一度読んだところはメモリ上にキャッシュされますが、SQLite がキャッシュするサイズは PRAGMA cache_size で設定できます。あらかじめ設定されている値が良くないと思ったら変更すれば良いでしょう。
http://www.sqlite.org/pragma.html#pragma_cache_size
あと、OS もファイルの中身をメモリ上にキャッシュしますが、他にメモリが必要であれば自動的にキャッシュは捨ててくれるので、あまり気にしなくて良いでしょう。

Commented by あ at 2009/04/23 (Thu) 20:25:15

TrackBack ping me at


の末尾に2014年1月19日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2009-04-21_sqlite.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

2014年1月19日時点の日本の首相のファミリーネーム(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき

オススメ

Mozilla Firefox ブラウザ無料ダウンロード