TypeScript性能(asm.js,闭包编译器)和开销



我正在考虑在未来的项目中使用TypeScript与客户端MVC(很可能是Backbone.js+Marionette.jsEmber.js)相结合,因此有一些与性能和优化有关的问题:

  • TypeScript输出与本机JavaScript性能相比如何?

  • 由于asm.js是JavaScript的一个子集,是否可以将TypeScript代码转换为asm.js代码?如果是,是否已经有可能?

  • 创建使用TypeScriptGoogle Closure compiler的AMD项目的构建是否可能并且仍然有用?

  • TypeScript在文件大小方面平均增加了多少开销?

  • 例如,当在一个小项目中使用像Backbone.js这样的轻量级库时。就文件大小而言,使用TypeScript有意义吗?

我喜欢TypeScript的附加功能,但我不想为了编码风格和类型而牺牲性能。

欢迎任何关于在大型项目中使用TypeScript的文章/书籍,特别是与性能、优化和构建相关的文章/图书!

提前谢谢!

我们在团队中对TypeScript进行了全面的评估和测试,其他团队已经在使用它了,所以以下是我的经验:

  • TypeScript是JavaScript的超集,它主要以1:1的比例转换为JavaScript,而不会对性能造成任何重大影响,因此,如果你知道如何编写高效的JavaScript,你就知道如何编写有效的TypeScript。其中一个效率不高的特性是继承,它是使用JavaScript原型"模拟"的,产生的代码比通常用JavaScript编写的代码多。因此,谨慎使用继承。您可以查看生成的JavaScript,看看您的构造是否足够高效地编译以满足您的情况
  • 将typescript编译为asm.js与将JavaScript编译为asm.js是相同的问题-与完整的JavaScript相比,您需要模拟asm..js所缺乏的功能。。。如果你需要asm.js中的一些部分,你可能需要自己编写它们,或者用emscripten等更合适(不太动态)的语言编译
  • TypeScript有一些AMD支持,但我不能谈论谷歌关闭支持。。。由于它试图以非常不同的方式完成类似的事情(注释中的类型和元信息,而不是以新的语法),我认为它们不太兼容,无法最大限度地使用两者
  • 文件大小并不是一个真正的问题,它与可读JavaScript的文件大小非常相似,除非你经常使用继承
  • 与JavaScript相比,将TypeScript与主干和其他库一起使用有一个好处;大多数流行的库已经有了TypeScript的类型定义文件,所以您几乎可以免费获得自动完成和类型检查。与编写良好的JavaScript相比,文件大小差异并不是一个真正的问题

TypeScript还很年轻,当时我们想要的许多东西(JSLint、代码覆盖率、TDD、BDD工具…)都不见了。此外,编译器中有几个错误(后来已经修复),所以我们没有选择使用它,但您的列表中没有任何一点对我们来说是真正的失败…

更新:要了解TypeScript的潜力,您可以查看Visual Studio Online"Monaco"。他们在那里所做的是非常令人印象深刻的看到快速介绍的TypeScript入门

最新更新