繁体   English   中英

可以为Closure Compiler输出TypeScript输出注释吗?

[英]can TypeScript output annotations for Closure Compiler?

我正在使用TypeScript,我想使用Closure-Compiler来缩小和混淆我在构建TS代码后得到的JS输出。

我读到GCC能够根据类型定义进行混淆。 据我所知(如果我错了请纠正我),这意味着如果我的代码上有类型注释,那么GCC将使用它们来进行更好的混淆。

例如,对于obj.someProp GCC当前在我的代码中查找someProp属性名称的所有实例,而不考虑它所在的对象,并将所有这些实例替换为相同的混淆名称(例如oa )。
但是如果我在我的代码上有类型注释,GCC将能够知道哪个对象属于哪种类型并相应地对其进行模糊处理 - 因此两个不同类型的相同属性名称将被混淆为两个不同的名称。

问题:

  • 我理解正确吗?
  • “类型安全”混淆是一件好事吗?
    我的意思是,它有什么好处? 它似乎不会对生成的文件大小产生影响,甚至可能对gzip压缩文件大小产生负面影响(因为不同类型的密钥可能有更多不同)。
  • 我可以使用TypeScript以某种方式自动创建GCC注释吗?
    由于TS已经是类型安全的,我相信它是可能的,但我怀疑它是一个功能。 它可能需要TS编译器内部的知识。 有什么见解吗?

编辑

我其实刚发现这个这个 我会检查出来并尽快发布更新。

更新

截至20150315版本的Closure-compiler,默认情况下启用基于类型的优化。


“使用优化类型”会触发多个编译器优化:

  • “歧义属性”
  • “模糊属性”
  • “内联属性”

消歧在优化过程的早期发生,并使类型无意识优化能够删除未使用的属性,虚拟化和其他优化

在重命名之前就出现了ambiguation,它专门用于通过利用较短的名称并使它们更常见来改善代码大小(这可以改善gzipping)

内联属性使用类型信息来内联属性,否则这些属性不会被虚拟化。 这个过程效果较差,因此讨论不那么有趣。

这些优化对于大型项目非常有效,但由于通常没有任何运行时类型实施,因此存在一些风险。 有可能以各种无意的方式对这些类型撒谎。 我在这个项目维基页面中更详细地描述了风险:

https://github.com/google/closure-compiler/wiki/Type-Based-Property-Renaming

风险很低,但可以通过使用编译器支持的“运行时类型检查”检测来减轻风险。 如果您正在尝试改造更大的项目或无法隔离“错误”消歧,请查看“运行时类型检查”

TypeScript问题是一个单独的问题,应该是一个单独的问题。 可以在某种程度上将TypeScript转换为Closure Compiler类型系统,但TypeScript和Closure Compiler类型系统之间存在差异(TypeScript明显不合并且允许许多不安全的分配)。

你的理解大多是正确的。 基于类型的重命名(需要--use_types_for_optimization标志)的优点是,不再阻止命名与extern中的任何属性相同的属性重命名。

var foo = {};
foo.src = 'test'; //only renameable with type based optimizations

至于typescript,正在修改closure-compiler以理解类型 - 脚本样式类型表示法。 然而,这个项目还处于初期阶段。 您链接的插件是我现在知道的最佳选择。

Typescript和Closure-Compiler中的类型系统现在不完全兼容。 这也正在积极开展。

我认为Google Closure Compiler将在不久的将来支持TypeScript注释。 这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM