Language-tools: Mengaktifkan fitur Token Semantik pada file besar menyebabkan Server Bahasa menjadi sangat lambat

Dibuat pada 18 Jan 2021  ·  4Komentar  ·  Sumber: sveltejs/language-tools

Jelaskan bugnya

Plugin VS Code Svelte v104.0.0 memperkenalkan dukungan untuk Token Semantik. Secara default, ini diaktifkan:

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

... Namun, lead ini untuk perlambatan signifikan dalam .svelte file mana <script lang="ts"> elemen terdiri dari sejumlah besar naskah (dalam kasus saya, 2.600 baris). Server Bahasa menjadi tidak responsif secara efektif, dengan pengecekan tipe yang memakan waktu lebih dari satu menit dan tooltips dibekukan pada "Memuat ..." tanpa batas.

Untuk Mereproduksi

Dengan plugin VS Code Svelte v104.0.0 terinstal, dan opsi default "svelte.plugin.typescript.semanticTokens.enable": true diterapkan, buat file .svelte dengan, katakanlah, 2.600 baris kode TypeScript. Sengaja buat kesalahan waktu kompilasi dan perhatikan karena semua pemeriksaan tipe membutuhkan waktu yang sangat lama untuk merespons.

Anda dapat memperbarui pengaturan ke "svelte.plugin.typescript.semanticTokens.enable": false dan melihatnya langsung menjadi responsif kembali. Tidak perlu me-restart Server Bahasa, atau me-restart VS Code, untuk mengamati perubahannya.

Perilaku yang diharapkan

File .svelte berisi skrip TypeScript harus tetap responsif tidak peduli seberapa besar skrip tersebut, dan tidak ada konfigurasi tambahan oleh pengembang yang diperlukan untuk mempertahankan kinerja yang dapat digunakan.

Sistem (harap lengkapi informasi berikut):

  • OS: macOS 10.15.7
  • IDE: Kode VS 1.52.1
  • Plugin/Paket: "Svelte untuk VSCode"

Konteks tambahan

Seperti yang didiskusikan dengan @dummdidumm pada Svelte Discord di #language-tools . Atas perhatian @jasonlyu123.

Dari @dummdidumm di Discord:

dummdidumm: Ya, Token Semantik bisa lambat pada file besar, terutama karena kita perlu melakukan banyak pemetaan peta sumber
dummdidumm: @jasonlyu09 mungkin kita harus menambahkan beberapa batasan untuk file/rentang besar, pada dasarnya tidak membuat permintaan jika rentang yang diminta untuk dianalisis menjadi terlalu besar. Saya pikir VS Code melakukan hal serupa.

Fixed bug

Semua 4 komentar

Ya, ekstensi TypeScript VSCode membatasinya pada 100000. Tapi saya merasa itu masih sangat lambat bagi kami, mungkin karena pemetaan sumber, saya pikir saya akan membatasinya pada 50000;

Ya, ekstensi TypeScript VSCode membatasinya pada 100000. Tapi saya merasa itu masih sangat lambat bagi kami, mungkin karena pemetaan sumber, saya pikir saya akan membatasinya pada 50000;

@jasonlyu123 100.000 dari apa? File 2.600 baris saya memiliki 128.292 karakter, jadi jika seharusnya menonaktifkan Token Semantik untuk file dengan lebih dari 100.000 karakter, sepertinya tidak melakukannya sama sekali.

Meskipun jika ini tentang panjang beberapa file yang dihasilkan (PR Anda menyebutkan TSX, jadi mungkin begitu), daripada sumbernya sendiri, saya tidak tahu berapa panjang file yang saya hasilkan.

Karakter, jika file js/ts melebihi karakter itu, ekstensi TypeScript tidak akan memproses token semantik file lengkap. Saya mencoba nomor pada ekstensi langsing dalam mode debug dan sepertinya masih terlalu lambat.

Ada beberapa jenis permintaan token semantik yang dapat diterapkan oleh server bahasa. Saat ini kami menerapkan rentang dan file lengkap seperti ekstensi TypeScript. Dari pemahaman saya, sepertinya vscode akan mencoba hanya mendapatkan hasil yang berkisar ketika file lengkap tidak tersedia. Dan rentang satu adalah mengapa Anda akan melihat perubahan warna yang tiba-tiba saat menggulir dokumen ke bawah.

Sekarang sudah ditutup. Mari kita sekarang jika itu dapat digunakan lagi saat mengaktifkan token semantik.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat