本気でJavaScriptによる端末エミュレーションを考えてみよう (1)
昔、某天才Yさんの紹介してくれたJS/UIXに本気で釣られて、JavaScriptで端末エミュレータを書き始めたことがあった。
結局まごまごしているうちにAjaxTermが出てしまったのだが、こちらはすべてサーバサイドでエスケープシーケンスを解釈してHTMLにレンダリングするタイプ。本質的に仕組みが違うし、自分のものと同じように改善すべき点はいっぱいあった。
そのときのソースは賞味期限切れる前にそのうち出すとして、今後同じことをやってみたいという好事家 (がいたとしたら) のためにメモを書いておきたい。
- サーバサイドの問題
- クライアントサイドの問題
- 最初1文字=1テキストノードというアホな構成でやってみたけど、愚の骨頂。スクロールが使い物にならなかった。innerHTML 操作がやっぱり速い。
- <div style="font-family:monospace"> の中に展開するよりは、iframe に展開してスクロールバッファを兼ねてしまった方がパフォーマンスが出るかもしれない。
- 1行を1ノードとして、カラーシーケンスの処理は、キャラクタバッファと HTML ラインバッファを持たせておいて、ライン単位で更新するのが最も効率がよさげだった。
なお、このメモは今後拡大する予定あり。
ですます調、面倒くさいのでやめる予定あり (今日みたいに)。