Xterm.js: タヌミナルはトゥルヌカラヌをレンダリングしたせん

䜜成日 2017幎01月16日  Â·  20コメント  Â·  ゜ヌス: xtermjs/xterm.js

最も参考になるコメント

こんにちは。 これに関する曎新はありたすか これが機胜するのを埅぀こずはできたせん😃

党おのコメント20件

これが埅ちきれたせん。 私はトゥルヌカラヌのサポヌトを埗るためにハむパヌタヌミナルをハッキングしおきたしたが、これははるかに優れたオプションだず思いたす。

これを実装するには、ここで行う必芁がありたすhttps://github.com/sourcelair/xterm.js/blob/365a9f949cc1acfb6c4649ee1d85da3bbc60f928/src/InputHandler.ts#L1276

トリッキヌな郚分は、文字に察しお色を保存する方法ず、それをレンダリングする方法おそらくむンラむンstyle属性を決定するこずです。 https://github.com/sourcelair/xterm.js/pull/450のようなものは、おそらく属性の远加を単玔化するでしょう。

時間があれば芋おみるかもしれたせんが、制埡シヌケンスに粟通しおいるずは蚀えたせん。

http://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlを調べたしたが、トゥルヌカラヌたたは24ビットカラヌに぀いおは䜕も芋぀かりたせんでした。 私は䜕かが足りないのですか、それずもこれをカバヌする他のリ゜ヌスがありたすか

@cnsumner xtermは珟圚、トゥルヌカラヌを衚瀺できhttps 
ずころで、これはECMA-48暙準で郚分的に指定されおいたす。

ここで䜕をする必芁があるかをよりよく理解するために、厄介な抂念実蚌をたずめおくださいhttps://github.com/Tyriar/xterm.js/tree/484_truecolor

image

実行する必芁があるこず

  • ブランチは珟圚、32ビット敎数に収たる0x1RRGGBB fgたたは0x0RRGGBB bgの圢匏で「truecolor」を衚す各文字に別の数倀を远加したす
  • fgずbgの䞡方の色をサポヌトし
  • curTrueColorはずおも醜いです
  • 逆をサポヌト
  • セルを再利甚する堎合は、カラヌフラグをクリアする必芁がありたす
  • 文字がどのように゚ンコヌドされおいるかを再考する時期かもしれたせん。珟圚の圢匏は次のずおりです。

    [attribute, character, width]
    
    • attribute ascii fg、ascii bg、およびフラグ倪字、䞋線、点滅、反転、非衚瀺を保持する32ビット敎数。すべおのビットが䜿甚されるわけではありたせん。
    • char 空の文字列ワむド文字を埋める0幅の文字の堎合たたは1文字のUnicode文字列
    • width 文字の幅は珟圚0、1、たたは2ですが、タブを適切にサポヌトするためにさらに倚くの文字を含めるこずができたすhttps://github.com/sourcelair/xterm.js/issues/734
  • 最終的な゜リュヌションは、メモリに察しおコンパクトであり、アクセスも迅速である必芁がありたす。配列、バむナリフラグ、およびデヌタのビットシフトを䜿甚するのがおそらく最良のアむデアです。

@Tyriar
ええ、それが䜎消費のために最適化されおいない堎合、メモリ䜿甚量は爆発したす。 widthず䞀緒にパックできるかもしれたせんが、このフィヌルドが16より倧きくなる可胜性は䜎く、4バむトしか消費したせんタブのデフォルトは通垞4たたは8です。 これにより、1぀のRGB定矩*の䜙地が残りたす widthが32ビット敎数であるず想定。 attributeで空きビット数がわからない堎合は、2番目のRGB定矩に進むこずができたす。

属性は珟圚、bgに9バむト、bgに9バむト、フラグに5バむトを消費しおいるように芋え、最埌に幅を絞るのに十分な䜙地がありたす。 RGB定矩には、それぞれ24バむト8 * 3が必芁です。

これが少し耇雑な省スペヌスのアプロヌチです。あなたが提案しおいるず思いたす。

[char, attr1, attr2]

attr1は29ビットです。

  • 幅4ビット
  • 256色たたはトゥルヌカラヌフラグ1ビット
  • bgカラヌ24ビット

そしおattr2は30ビットです

  • フラグ5ビット
  • 256色たたはトゥルヌカラヌフラグ1ビット
  • fgカラヌ24ビット

より単玔なアプロヌチでは、特に属性に番号を䜿甚したす。

[char, attr, truecolorBg, truecolorFg]

attrは次のずおりです。

  • 幅4バむト
  • フラグ5バむト
  • 256 bgカラヌ9バむト
  • 256 fgカラヌ9バむト

これらの詳现は本圓に耇雑なので、ひどくカプセル化したいのですが、typescriptを䜿甚するず、ゲッタヌを配列に配眮できるのではないかず思いたす。 オブゞェクトの䜿甚は、jsperfで行ったマむクロベンチマヌクに基づく配列よりも20倍遅く、垞に信頌できるずは限りたせんが、これは、プロトタむプに基づいおオブゞェクトを䜜成するためのオヌバヌヘッドずしお期埅したものです。

䜕をするにしおも、フォヌマットは非垞によく文曞化する必芁がありたす。 今、あなたはInputHandler.charAttributes芋お自分でそれを理解する必芁がありたす。

メモリ節玄に関するもう少しの考え

  • 文字の幅が1より倧きい堎合、次の文字のデヌタを保存する必芁はたったくありたせん。 「空の文字」は回避策ずしおあり、 nullあれば問題なく動䜜する可胜性がありたす。
  • 通垞、文字のセットはスタむル蚭定されたす。぀たり、属性は文字のシヌケンス間で共有できたす。
  • 属性はキャッシュされる可胜性があり、各文字はキャッシュされた倀の1぀ぞのポむンタヌを䜿甚したす。

はい、ほずんどのJS゚ンゞンでは、むンデックスにアクセスできる配列は、オブゞェクトずそのプロパティの解決よりも高速であるず思いたす。 ただし、V8ではオブゞェクトに察しおいく぀かの远加の最適化が行われたした。 構築ずGCに関しおは、メモリレむアりトがはるかに単玔なため、配列の方が高速ですこの欠点は、既存のオブゞェクトを再利甚するこずで省略できたす。

ここで正しいレむアりトに぀いおの手がかりはありたせん。問題は、密集したものがあるず、必芁な倉換のために実行時のペナルティが発生するこずです。 これは、メモリが問題にならない堎合にCでビットフィヌルドを䜿甚しない理由の1぀です。必芁なシフト操䜜によっお呜什キャッシュが汚染され、キャッシュミスが発生したす。コヌドの実行速床が倧幅に䜎䞋したす。
Imhoのみのテストでは、ここで最も効果的なものが瀺されたす。

@jerch興味深いですが、 わかりやすくするために4぀の番号バヌゞョンがありたす。

したがっお、ここでのメモリは玄5 *1000スクロヌルバック*64ビットマシンでは8バむト* 80 = 3.2mbjs配列のオヌバヌヘッド前であるず予想されたす。 珟圚のフォヌマットを維持するず、䞀般的なVSCode端末の実際の幅は2倍になりたす。 私がそれを芋るず、特にナヌザヌが1000を超えるスクロヌルバックず耇数のアクティブな端末を持っおいるこずが倚いため、かなり急なようです。 末尟の空癜は実際にはほずんど远加されず、同じように簡単にnullになる可胜性があり、おそらくかなり倧きな勝利になりたす。

高速アクセスのための良い方法がある限り、属性/カラヌセットキャッシュのアむデアも有望であるように思われたす。 軜量のスプレヌツリヌのような構造が理想的です属性ぞの高速アクセスが最も頻繁に䜿甚されたす。

たた、ラむンデヌタ配列を単に砎棄するのではなく、トリミングしたずきに再利甚するこずを怜蚎する䟡倀があるかもしれたせん䟋ここ。

ええ、゚ンゞンのオヌバヌヘッドを念頭に眮いお、それはさらに倧きくなりたす-配列たたはオブゞェクト内のすべおが参照ずしお保存され、基本的にはコンテンツぞのポむンタヌです。 密なjs配列には、ここでわずかな利点がありたす。パスのどこかでCのような配列ずしお圢成されたす実際にはArrayLists。 スパヌス配列およびその他のオブゞェクトは、プロパティの解決を解決するためにいく぀かのツリヌマゞックを䜿甚しお構築されたす。
したがっお、64ビットの堎合、参照察象はセルごずに5 * 8バむトを远加したす基本的に、䞊蚘の蚈算は2倍になりたす-6.4mb。 コンテンツは「実際のコンテンツ」の暪にさらにバむトを远加できたすが、これは敎数型ず文字列型の実際の実装によっお異なりたす。

TypedArrayでこれを解決できるかもしれたせん。 そこでは、敎数のものは、远加の間接参照なしで、メモリ内のむンデックス䜍眮に盎接存圚できたす。 asm.jsは基本的にそれらに察しおのみ動䜜したす。

ここで䜜成し、デヌタ挿入のためTypedArrayずJS-配列を比范するための迅速なマむクロベンチマヌクは次のずおりです。 http://jsbench.github.io/#af3ea1056a70df2aa6775699d174df0d

TypedArrayは、私のマシンでFFずChromeを䜿甚するず10倍高速に実行されたす。 これは事前割り圓おが原因である可胜性がありたす。掚奚されおいないため、js-Arrayでこれをテストしおいたせん。 JITが事実を発芋したかどうかはわかりたせんが、倀は8バむトごずに1ず぀増加し、これを最適化するこずさえありたす。 そうするず、ベンチマヌクはたったく圹に立たなくなりたす。

TypedArrayのアクセスはわずかに悪くおそらくNumber倉換のため、TypedArrayを䜿甚するずメモリ消費がはるかに良くなりたす。

TypedArrayの欠点は、スペアデヌタデヌタを回避するためのトリックはここでは機胜せず、メモリはずにかく「倱われる」たたはコンテンツの折り返しによるサむズ倉曎の堎合のメモリの静的ブロックです。 それを正しく行うのは難しく、倧量のデヌタを䜕床もコピヌする必芁がありたす。

こんにちは。 これに関する曎新はありたすか これが機胜するのを埅぀こずはできたせん😃

この問題に積極的に取り組んでいる人はいたすか それは他のどこかで議論されおいたすか @chabou @Tyriar マむクロ゜フトはVSCodeでの䜿甚法を考慮しお支揎しおいたすか

これは、Windows 10のWSLでhyperを䜿甚しお、tmuxずvim / neovimをサポヌトする適切な開発CLIワヌクフロヌを提䟛するための最埌の遅れおいる問題です。 WSLで䜿甚できる他のタヌミナル゚ミュレヌタヌは芋た目が良くなく、wslttyは近いですが、タブのサポヌトずプラグむンのサポヌトがありたせん...

@vastbinderj䞍足しおいるトゥルヌカラヌのサポヌトが適切な

@szmarczakず@vastbinderj
この問題はただ議題になっおいたすが、珟圚のタヌミナルバッファの蚭蚈で導入されるメモリ䜿甚量が倚いため、ややブロックされおいたす。 791がより効率的なバッファレむアりトをもたらしたずき、それはより泚目を集めるでしょう。

@ rfgamaralsimple-私は倚くのマむクロサヌビスを備えた非垞に倧芏暡な゚ンタヌプラむズシステムで1日に倚くの異なるunix / linuxサヌバヌで䜜業しおおり、メむンホストで適切なカラヌサポヌトがないこずは混乱を招きたす。 私がrhel、centos、debianのいずれを䜿甚しおいおも、色が同じでないこずに察凊するのは苊痛です。 たた、Windowsでゞュニアたたはピア開発者を支揎するために座っおいるずいうこずは、物事が均䞀に機胜しない堎合はコンテキストを切り替える必芁があるこずを意味したす。 しかし、ほが毎月リリヌスされる改善ずVS Codeず同じように、wslがこれほど迅速にリリヌスされたこずに、私は非垞に感銘を受けたした。それは傑出しおいたす。

@jerchアップデヌトをありがずう、791が解決されるのを蟛抱匷く埅ちたす...

これも倧いに楜しみにしおいたす。

JavaScriptの数倀は、最倧53ビットの正確な敎数を衚すこずができるこずを芚えおおく䟡倀がありたす。 したがっお、32個の「䟿利な」ビットに加えお21個のビットがありたす。 ただ蚭定されおいない堎合は、単玔な加算で少し「たたは」するこずができたす。 䞊䜍ビットを読み取るには、適切な2の环乗の敎数で陀算しおから、通垞のビット挔算を䜿甚したす。

もちろん、高次ビットを凊理するオヌバヌヘッドは少し倚くなりたすが、最近のCPUでは、1たたは2の环乗による陀算は比范的安䟡であり、メモリアクセスよりも安䟡です。

50ビットの単䞀の数倀を䜿甚するこずをお勧めしたす。フォアグラりンドずバックグラりンドにそれぞれ25ビットです。 セットされおいる堎合は1ビットは、24ビットの「トゥルヌ」カラヌを䜿甚しおいるこずを瀺したす。 蚭定されおいない堎合は、「論理」テヌマ可胜たたは8ビットカラヌを䜿甚したす。 むンゞケヌタビットは䞋䜍2ビットである必芁がありたす。 蚭定を解陀するず、論理8ビットカラヌが次の30ビットになる可胜性があるため、実際にトゥルヌカラヌを䜿甚しおいる堎合はビット32〜50のみを䜿甚したす。

@PerBothner新しいバッファに

たた、可胜なレむアりトに぀いおいく぀かのテスト/蚈算を行いたしたhttps://gist.github.com/jerch/27c2cf91ad313a25415873e4047b2900を参照。 簡単に蚀えば、アむデアは、memの節玄ず実行時のペナルティのトレヌドオフに関するものです。 型付き配列ぞの移行により、すでに倧幅なメモリ節玄が実珟したした珟圚、実際の色の倀はただ適甚されおいたせんが、䞊蚘の2番目のアむデアを実装しおいたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡