调查longTypeScript编译时间
我正在调查为什么我的Angular 2.0 TypeScript项目的编译时间在相当短的时间内从大约4秒到大约15秒.
我遇到了非常有用但似乎没有文档的诊断开关. 例如,这里是我现在在我的项目上运行tsc –noEmit –diagnostics时所得到的: Files: 231 Lines: 50872 Nodes: 170067 Identifiers: 65994 Symbols: 7712123 Types: 407677 Memory used: 600554K I/O read: 0.43s I/O write: 0.00s Parse time: 1.13s Bind time: 0.34s Check time: 10.17s Emit time: 0.00s Total time: 11.64s 当我在早期版本的项目中运行相同的命令时,这是我得到的. Files: 197 Lines: 30882 Nodes: 124208 Identifiers: 46201 Symbols: 5856945 Types: 10989 Memory used: 80412K I/O read: 0.03s I/O write: 0.00s Parse time: 0.60s Bind time: 0.27s Check time: 0.93s Emit time: 0.00s Total time: 1.79s 类型的数量已经上升,检查时间也是如此. 是否可以从–diagnostics获取更详细/详细的输出? NodeJS v4.4.3,TypeScript v1.8.10.这是我的tsconfig.json { "compilerOptions": { "target": "es5","module": "system","moduleResolution": "node","noImplicitAny": false,"noEmitOnError": false,"experimentalDecorators": true,"emitDecoratorMetadata": true,"removeComments": false },"exclude": [ "node_modules","wwwroot","typings/main.d.ts","typings/main" ] }
看来我在我的案子中发现了罪魁祸首.我做的很艰难的方式;我的过程:
找到使编译速度慢的提交.浏览历史commit-by-commit并检查编译时间. 在违规提交之前,我一直得到约2-4秒的编译时间,提交后13-17秒. 在我的情况下,我有一个类,其中有一个accessTokenGetter字段,它在构造函数中初始化: export class JwtConfig { //... accessTokenGetter: () => Observable<string>; //... constructor(private config?: IJwtConfig) { // ... this.accessTokenGetter = this.config.accessTokenGetter || (() => Observable.of(null)); } } 初始化的第二部分|| (()=> Observable.of(null));造成缓慢.将其注释出来或添加类型注释可以将编译时间缩短.由于Observable是通用的,因此TypeScript编译器似乎需要一个提示来缩小需要做的类型检查.我的初始化现在读为: //... this.accessTokenGetter = this.config.accessTokenGetter || (() => Observable.of(<string>null)); //... Observable.of(null as string))也似乎做了这个工作.还有其他几个地方添加了类型注释sped编译. 希望这有助于某人. 不过,如果编译器中有一个设施能够更快地回答答案,我很乐意听到. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |