30 July '2007 - 21:49 | iPhone 辞書を内蔵しようか迷い中
jKeyboard の辞書アクセスは Ajax なのだけれど、いちいちアクセスするのは遅いので辞書も内蔵したらどうだろうか。という案は、じつは最初のバージョンをリリースする前から気づいている。
以前、JTPA ギークサロンで増井さんに POBox を bookmarklet で使うデモを見せてもらった時、辞書もぜんぶ読み込んでしまってるので変換が速いというのを自慢されたのだけれど、それと同じようにしてみようかなとは最初に思った。
ただ、Ajax でいろいろと遊んでみたかったので、パフォーマンスはとくに気にしないことにした。
増井さんは、重くしすぎないためにも単語数は少なめで動かしてると言っていたし、それでも十分使えるものだと言っていたし、もし、Ajax うぜーって話になったら、その時に考えようかなあ、くらい。
で、結局、まあ、遅いわけだけれど、それほどお叱りはもらってない。
日本語が入力できるだけでとりあえずは満足というところか。もしくは、いきなり文句をいうともう仕事しなくなっちゃうかもしれないから、もうちょっとおだてておいて、頃合いを見計らって、「おせーよ、つかえねーよ」って言うつもりなのか。よく分からない。
Ajax するタイミングをもう少し遅らせろとか、変換キーを追加してユーザに変換のタイミングを指定させろ、と怒られたことはあるけれど、いまのところぼく自身は現在の遅さにそれほど不満がない。そもそもタイプを速くすることができないから、ちょっとくらい遅くてもいいんじゃない?みたいな。
ちなみに、タイプを速くできない理由は、タッチしてから onclick が飛んでくるまでにとても時間がかかるからだ。これだけは、いくら頑張ってもぼくが最適化することはできない。
なぜそんなに時間がかかるのかといえば、それは、タッチしてから onclick を呼ぶまでにやっていることがいくつかあり、その中には、その処理の為に wait (timer) が入っているというのが根本的な要因だと思われる。
たとえば、クリッカブルな領域をタッチした時に、その部分を暗転表示したりしているのも一つ。またダブルクリックをズームイン•ズームアウトのイベントとしていることも大きい。このイベントがあるせいで、BS キーを連続ヒットしてもそれは jKeyboard には届かないわけだ。(ちなみに、user-scalable="no" にしても結果は同じ)
javascript な jKeyboard が内蔵キーボードのような使い勝手で動くようになるはずがないけれど、それでも、もしこのズーム用イベントを完全に止めて、onclick までの時間を短縮できたら、かなり速く動くようになるんじゃないかと思う。
将来のバージョンで Flash が動くようになるとしたら、Flash の上でのダブルクリックイベントはどうなるのかなあ。楽しみだ。
さて、基本的に遅いのは仕方ないとして、たとえば辞書アクセスがなくなったらどのくらい快適になるのか、とりあえず手元の環境で実験してみた。
基本辞書だけだと面白くないと思って、とりあえず jKeyboard で使ってる辞書を全部、だいたい 5万語弱を Javascript で配列に突っ込んで gzip 化してみたら、もともと 30Kb 弱だった jkeyboard.js は 320Kb ほどになった。でかっ。
iPhone にロードするのにえらく時間がかかる。当然。と思ったら、いきなり Safari が死亡。ははは。
もしかしたら動かないのかと思いつつもそのまま再挑戦してみたら、今度はうまく動いた。ふむ。動くには動くようだ。どのくらいまでの大きさの Javascript だったら動くんだろう。せんじつ、 10Mb くらいの PDF を bookmarklet にしてみたら、まったく動かずに死亡したので、上限はあるようだけれど。
さて、パフォーマンス。さすがに Ajax ゼロ状態なので、変換ウェイトもゼロにしてさくさく動く。快適そのもの。
ただ、送り仮名とか活用とかのチェックは面倒だったのでぜんぶ省略したから、変換はかなり馬鹿。まあ、いまの jKeyboard も品詞チェックとかまではやってないのでかなり馬鹿だけれど、細かいことはいいかな。もし罵倒されたら、もしくは他にやることがなくて何でもいいから暇つぶしが必要になったら mecab-skk でも使って賢くしようかな、くらい。
で、これだけだと、なんだかわかんねーよって怒られるといけないので、いちおう、変換が速くていちばん(ぼくが)嬉しそうなところにテスト用にいれてみた。http://n.h7a.org/iphone/lingr/test.php です。
ただし、ロードされるまでに永遠の時間がかかりますし、Safari が落ちることもあります。変換が一瞬だとどのくらい快適かを試してみたい人だけどうぞ。
しかし、こんなにロードが遅かったらさすがに使えなさすぎるので、辞書をたとえば常用漢字だけとかにして実験した方がいいかな。どっかにいい辞書があったら教えてくださいな。