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:

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

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

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

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

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

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

    ReplyDelete

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.