إصدار TypeScript: 2.4.1
مشروع Repro
عند استيراد ملف JS كبير (محلل عمل) (تنسيق 245 كيلو بايت) (مع تمكين --allowJs
) يتوقف المترجم إلى الأبد. الحد الأدنى من مشروع repro المقدم: tsc-hang-00
سلوك متوقع:
التجميعات تنتهي بأخطاء أو بدونها.
السلوك الفعلي:
التجميعات معلقة إلى الأبد وتحافظ على استهلاك وحدة المعالجة المركزية.
شروط الاختبارات
حاولت تحديد ما يحدث هنا ومحاولة التقاط ملف تعريف وحدة المعالجة المركزية لأي فترة زمنية (حتى 1 ثانية) سيؤدي إلى تعطل ملف تعريف Chrome أثناء معالجة ملف تعريف وحدة المعالجة المركزية.
ربما لا يكون التنميط مفيدًا لملف بحجم 245 كيلو - فهو عادةً خطأ أو مشكلة أداء خوارزمية ، وكلاهما يعبر عن نفسه عادةً على أنه مكدسات عميقة جدًا. طريقة التصحيح الأولية الخاصة بي هي بدء التصحيح والإيقاف المؤقت عدة مرات. سأعود إلى التنميط (أو تصحيح أخطاء printf للذاكرة المؤقتة) إذا لم يكن هناك نمط في المواقع.
هناك معنيان مرتبطان بـ "الموقع": العقدة التي يتم فحصها حاليًا ، وحيث يكون مؤشر التعليمات عند إيقاف التصحيح مؤقتًا.
Heya ، أردت فقط أن أقول إن لديّ نسخة أخرى أبسط في https://github.com/filipesilva/tsc-allowjs-big-file. تم استلهامها من reprodzonatan على https://github.com/angular/angular-cli/issues/9636#issuecomment -390203543.
إنه يحتوي فقط على فصل دراسي بألف طريقة:
export class BigClass {
myVar: any;
method000() { return this.myVar; }
method001() { return this.myVar; }
// ...
method999() { return this.myVar; }
}
سيؤدي تشغيل npm test
على هذا المستودع إلى تجميع ملف الكتابة هذا إلى جافا سكريبت ، ثم تجميع ملف جافا سكريبت الناتج باستخدام --allowJs
.
ينتج عن هذا الخطأ RangeError: Maximum call stack size exceeded
مع TS 2.7.2 و 2.8.4. ومع ذلك ، في TS 2.9.1 ، لا يقع أي خطأ وينجح التجميع.
التعليق الأكثر فائدة
Heya ، أردت فقط أن أقول إن لديّ نسخة أخرى أبسط في https://github.com/filipesilva/tsc-allowjs-big-file. تم استلهامها من reprodzonatan على https://github.com/angular/angular-cli/issues/9636#issuecomment -390203543.
إنه يحتوي فقط على فصل دراسي بألف طريقة:
سيؤدي تشغيل
npm test
على هذا المستودع إلى تجميع ملف الكتابة هذا إلى جافا سكريبت ، ثم تجميع ملف جافا سكريبت الناتج باستخدام--allowJs
.ينتج عن هذا الخطأ
RangeError: Maximum call stack size exceeded
مع TS 2.7.2 و 2.8.4. ومع ذلك ، في TS 2.9.1 ، لا يقع أي خطأ وينجح التجميع.