【问题标题】:TypeScript compiler becomes slow?TypeScript 编译器变慢了?
【发布时间】:2012-10-06 01:10:44
【问题描述】:

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

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

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

编译和构建成功,但 IDE 的智能感知非常慢。我只是打开winrt.d.ts 并检查了文件。该文件有 18,770 行,这是一个非常大的文件,可以即时编译。

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

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

更新:

在当前的编译器版本(0.8.0)上,没有解决办法。 希望在不久的将来的版本中看到最好的性能提升。

更新:

这是我提升开发的简单技巧。表现。 我只是创建了winrt.compact.d.ts。 然后只复制实际使用的命名空间的一部分 并保存文件。

幸运的是文件(winrt.d.ts) 看起来正在生成 从几个声明文件。所以每个命名空间都是 明显与他人分开。 为 WinRT 制作精简版要容易得多。

【问题讨论】:

    标签: typescript


    【解决方案1】:

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

    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 行要少得多,所以可能所有行的总和对于编译器来说太多了,无法达到可接受的速度。

    除此之外,我唯一的想法是“其他原因”导致您的机器速度变慢。如果您向我提供库的链接和代码的 sn-p,我至少可以测量编译运行在我的系统上需要多长时间。

    【讨论】:

      【解决方案2】:

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

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

      您目前无法做任何改进(除了为编译器提供更多硬件!)但希望工作项能够被采纳并解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-30
        • 1970-01-01
        • 2017-09-15
        • 2015-01-07
        • 1970-01-01
        • 1970-01-01
        • 2014-02-24
        • 2016-10-22
        相关资源
        最近更新 更多