2017-10-05

VS CodeがDOMによるターミナル実装のパフォーマンスを改善できなかったためCanvasに変更

Integrated Terminal Performance Improvements

Electronという史上まれに見るそびえ立つクソのようなGUIプラットフォーム上で実装されているVS Codeが、ターミナルの実装をDOMによるものからCanvasによるものに変更したそうだ。これは、DOMによる実装ではパフォーマンスの改善が十分にできなかったからだという。

DOMでターミナルを実装する際の問題ごととして、テキスト選択、テキストアライメント、GC、パフォーマンスを上げている。

テキスト選択:ターミナルのテキスト選択を実現するためにDOMのテキスト選択の挙動をだいぶ上書きしなければならない。

テキストアライメント:一部の文字はモノスペースになってくれず、workaroundとして一文字ごとに固定長のspanで包む必要があるが、これはパフォーマンス上よろしくない。

GC:DOMでターミナルを実装するためにメチャクチャなことをするのでGCによってパフォーマンスが劣化する。オブジェクトをプールすることでなるべくDOMを使いまわしGCを低減する泥臭いハックをしたが、限界がある

パフォーマンス:色々と頑張ったが、結局パフォーマンスは悪かった。

そして結局、要素を組み合わせてレイアウトを決定するという処理だけで16.6ms以上かかる場合もあり、60fpsを達成できないので、ターミナルをDOMで実装するのは不向きだという結論に達したそうだ。

フルHDのデスクトップ画面をキャプチャしてH.264などにエンコード、デコードすることをリアルタイムで行えるほどコンピューターが高速化したこの2017年にターミナルを60FPSで実装するのに苦労しているのはすさまじい。

やはりElectronは悪い文明 粉砕する!

5 comments:

Anonymous said...

折角なので江添さんがElectronを気に入らない理由も教えて頂けると幸いです

Anonymous said...

ブラウザがシェルを占拠してやるぜ!みたいなことを言い出して久しいですが、
ブラウザ(WebKit/blinkなど)はいまだにターミナルを持ってないのですね。。

そういわれたらそうなのですが、確実にニーズはありますよね

Anonymous said...

なんか「電子レンジだけだと自炊できないから調理器具買ったよ」と言ったら「これだから電子レンジはダメだ。絶滅すべき」って返ってきたかのような支離滅裂さを感じる。

Anonymous said...

Unityと同じでプロが使うようなもんじゃないんだよなぁ…
プロのコックが“メインで”電子レンジ使ってたらドン引きだろう?

Anonymous said...

「Electronは悪い文明」
おいエゾ、お前がそう思うのは勝手だが、客観的事実かのような物言いは中傷だぞ