我正在考虑在未来的项目中使用TypeScript
与客户端MVC(很可能是Backbone.js
+Marionette.js
或Ember.js
)相结合,因此有一些与性能和优化有关的问题:
-
TypeScript
输出与本机JavaScript性能相比如何? -
由于
asm.js
是JavaScript的一个子集,是否可以将TypeScript
代码转换为asm.js
代码?如果是,是否已经有可能? -
创建使用
TypeScript
和Google 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入门