TypeScript编译器变慢了?

时间:2012-10-16 01:03:23

标签: typescript

我正在使用TypeScript开发Win8应用程序。

为了编译我的打字稿代码,我添加了winrt.d.tswinjs.d.ts然后引用它们 使用:

<reference path="winrt.d.ts" static="true" />
<reference path="winjs.d.ts" static="true" />

编译&amp;构建成功但IDE的智能感觉非常慢。我只是打开winrt.d.ts并检查了文件。该文件有18,770行,这是一个非常庞大的文件,可以动态编译。

是否有任何选项或方法可以引用那些巨大的定义文件而无需再次编译,就像lib.d.ts一样?

这种缓慢严重伤害了我的TypeScript选择。

更新:

在当前的编译器版本(0.8.0)上,没有解决方案。 希望在不久的将来发布中获得最佳性能提升。

更新:

这是我提升开发的简单方法。性能。 我只是创建了winrt.compact.d.ts。 然后只复制实际使用的部分名称空间 并保存文件。

幸运的是,文件(winrt.d.ts)看起来像是生成的 来自几个声明文件。所以每个命名空间 明显与他人分开。 为WinRT制作紧凑版本要容易得多。

2 个答案:

答案 0 :(得分:2)

如果我错了,请纠正我,但我认为编译器不会以任何特殊方式处理lib.d.ts。我查看了源代码,这里是处理lib.d.ts的代码段:

if(this.compilationSettings.useDefaultLib) {
    var compilerFilePath = this.ioHost.getExecutingFilePath();
    var binDirPath = this.ioHost.dirName(compilerFilePath);
    var libStrPath = this.ioHost.resolvePath(binDirPath + "\\lib.d.ts");
    code = new TypeScript.SourceUnit(libStrPath, null);
    this.compilationEnvironment.code.push(code);
}     

如果用户请求包含lib.d.ts,则只需将其添加到编译环境中作为要编译的第一段代码。所有其他源文件(存储在opts.unnamed中的文件都以完全相同的方式添加:

for(var i = 0; i < opts.unnamed.length; i++) {
    code = new TypeScript.SourceUnit(opts.unnamed[i], null);
    this.compilationEnvironment.code.push(code);
}  

因此,如果没有以特殊方式处理lib.d.ts,那么对于其他(声明)文件也是如此。此外,在我的系统lib.d.ts上有7,677行,这比winrt.d.ts报告的18,770行少,所以可能是所有行的总和太多而编译器无法实现速度。

除此之外,我唯一的想法是“其他东西”导致机器减速。如果您向我提供了库的链接和代码片段,我至少可以测量编译运行对系统的影响时间。

答案 1 :(得分:2)

Codeplex目前有一个针对此问题的未完成工作项:

http://typescript.codeplex.com/workitem/265

目前没有什么可以改善这一点(除了给编译器提供更多硬件!)但希望工作项目能够被选中,问题将得到解决。