Language-tools: 大きなファイルでセマンティックトークン機能を有効にすると、LanguageServerの速度が異常に遅くなります。

作成日 2021年01月18日  ·  4コメント  ·  ソース: sveltejs/language-tools

バグを説明する

VS Code Svelteプラグインv104.0.0では、セマンティックトークンのサポートが導入されました。 デフォルトでは、これは有効になっています。

// The default
"svelte.plugin.typescript.semanticTokens.enable": true

...ただし、これにより、 <script lang="ts">要素が大量のTypeScript(私の場合は2,600行)で構成されている.svelteファイルの速度が大幅に低下します。 言語サーバーは事実上応答しなくなり、タイプチェックに1分以上かかり、ツールチップが「読み込み中...」で無期限にフリーズします。

再現するには

VS Code Svelteプラグインv104.0.0がインストールされ、デフォルトのオプションである"svelte.plugin.typescript.semanticTokens.enable": true適用された状態で、たとえば2,600行のTypeScriptコードを含む.svelteファイルを作成します。 意図的にコンパイル時エラーを作成し、すべての型チェックが応答するのに非常に長い時間がかかるので注意してください。

設定を"svelte.plugin.typescript.semanticTokens.enable": false更新すると、すぐに応答するようになります。 変更を確認するために、LanguageServerを再起動したりVSCodeを再起動したりする必要はありません。

予想される行動

TypeScriptスクリプトを含む.svelteファイルは、スクリプトがどれほど大きくなっても応答性を維持する必要があり、使用可能なパフォーマンスを維持するために開発者による追加の構成は必要ありません。

システム(以下の情報を入力してください):

  • OS:macOS 10.15.7
  • IDE:VS Code 1.52.1
  • プラグイン/パッケージ:「SvelteforVSCode」

追加のコンテキスト

#language-tools SvelteDiscord

Discordの@dummdidummから:

dummdidumm:ええ、セマンティックトークンは大きなファイルでは遅くなる可能性があります。特に、多くのソースマップマッピングを行う必要があるためです。
dummdidumm: @ jasonlyu09おそらく、大きなファイル/範囲にいくつかの制限を追加する必要があります。分析するように要求された範囲が大きくなりすぎた場合、基本的に要求を行いません。 VSCodeも同様のことをしていると思います。

Fixed bug

全てのコメント4件

ええ、VSCodeのtypescript拡張機能は100000に制限しました。しかし、おそらくソースマッピングのせいで、それでも非常に遅いことがわかりました。50000に制限すると思います。

ええ、VSCodeのtypescript拡張機能は100000に制限しました。しかし、おそらくソースマッピングのせいで、それでも非常に遅いことがわかりました。50000に制限すると思います。

@ jasonlyu123 100,000の何ですか? 私の2,600行のファイルは128,292文字であるため、100,000文字を超えるファイルのセマンティックトークンを無効にすることになっている場合、まったく無効になっていないようです。

ソース自体ではなく、生成されたファイルの長さ(PRでTSXに言及しているので、おそらくそうかもしれません)の場合でも、生成されたファイルの長さはわかりません。

文字、js / tsファイルがその文字を超える場合、typescript拡張子は完全なファイルセマンティックトークンを処理しません。 デバッグモードでsvelte拡張機能の番号を試しましたが、それでも遅すぎるようです。

言語サーバーが実装できるセマンティックトークン要求には複数のタイプがあります。 現在、typescript拡張子のような範囲とフルファイルを実装しています。 私の理解では、vscodeは、ファイル全体が利用できない場合にのみ、範囲の結果を取得しようとするようです。 そして、範囲1は、ドキュメントを下にスクロールしたときに突然の色の変化が表示される理由です。

上限があります。 セマンティックトークンをオンにしたときに再び使用できるかどうかを見てみましょう。

このページは役に立ちましたか?
0 / 5 - 0 評価