TypeScript Version: 2.4.1
Proyek repro
Saat mengimpor file JS besar (pengurai yang berfungsi) (format commonjs 245 Kbytes) (dengan --allowJs
diaktifkan) kompilator hang selamanya. Proyek repro minimal yang disediakan: tsc-hang-00
Perilaku yang diharapkan:
Kompilasi diakhiri dengan atau tanpa kesalahan.
Perilaku sebenarnya:
Kompilasi hang selamanya dan terus menggunakan CPU.
Menguji kondisi
Saya mencoba membuat profil apa yang terjadi di sini dan mencoba menangkap profil CPU untuk waktu yang lama (bahkan 1 detik) akan menyebabkan profiler Chrome macet saat memproses profil CPU.
Pembuatan profil mungkin tidak berguna untuk file 245k - biasanya merupakan bug atau masalah kinerja algoritmik, yang keduanya biasanya mengekspresikan dirinya sebagai tumpukan yang sangat dalam. Metode debugging awal saya adalah memulai debugging dan hanya berhenti beberapa kali. Saya akan kembali ke pembuatan profil (atau printf debugging cache) jika tampaknya tidak ada pola di lokasi.
Ada dua arti yang relevan dari 'lokasi': node mana yang saat ini sedang diperiksa, dan di mana penunjuk instruksi berada saat debugging dihentikan sementara.
Heya, hanya ingin mengatakan saya punya repro lain yang lebih sederhana di https://github.com/filipesilva/tsc-allowjs-big-file. Ini terinspirasi oleh @dzonatan 's repro di https://github.com/angular/angular-cli/issues/9636#issuecomment -390.203.543.
Itu hanya memiliki kelas dengan seribu metode:
export class BigClass {
myVar: any;
method000() { return this.myVar; }
method001() { return this.myVar; }
// ...
method999() { return this.myVar; }
}
Menjalankan npm test
pada repositori itu akan mengkompilasi file skrip ketikan ini ke javascript, dan kemudian mengkompilasi file javascript yang dihasilkan dengan --allowJs
.
Ini menghasilkan kesalahan RangeError: Maximum call stack size exceeded
dengan TS 2.7.2 dan 2.8.4. Namun, dengan TS 2.9.1, tidak ada kesalahan yang terjadi dan kompilasi berhasil.
Komentar yang paling membantu
Heya, hanya ingin mengatakan saya punya repro lain yang lebih sederhana di https://github.com/filipesilva/tsc-allowjs-big-file. Ini terinspirasi oleh @dzonatan 's repro di https://github.com/angular/angular-cli/issues/9636#issuecomment -390.203.543.
Itu hanya memiliki kelas dengan seribu metode:
Menjalankan
npm test
pada repositori itu akan mengkompilasi file skrip ketikan ini ke javascript, dan kemudian mengkompilasi file javascript yang dihasilkan dengan--allowJs
.Ini menghasilkan kesalahan
RangeError: Maximum call stack size exceeded
dengan TS 2.7.2 dan 2.8.4. Namun, dengan TS 2.9.1, tidak ada kesalahan yang terjadi dan kompilasi berhasil.