javascript - 选择以输出大小为优先级的 Compile-to-JS 语言

标签 javascript coffeescript google-closure-compiler google-closure

我目前正在使用一个大型的 Javascript 代码库(目前缩小了约 150k),该代码库已包含在许多网站中。随着更多功能的添加,它的尺寸也不断增大,因此我现在正在研究减小尺寸的方法。

目前可用的选项之一是从纯 JavaScript 切换到编译为 JS 库。这可能会在开发过程中有所帮助,因为基于类的 OOP 和编译时类型检查等功能可以为我们节省一些工作。然而,重要的是,与纯粹在 JS 中工作相比,这样的更改不会增加代码库的大小。我研究过的语言似乎都不太关心输出大小。 Dart 看起来是最好用的,但编译后的输出却大得离谱。 GWT 带来的问题比它解决的问题还要多,而且输出的结果也不是特别令人愉快。我自己没有尝试过 Haxe,但一位同事尝试过,他告诉我它的输出非常臃肿。到目前为止,CoffeeScript 似乎是最有前途的,因为输出是相当标准的 Javascript,但它仍然生成比我们当前手工编写的更大的 JS 文件(尽管我只尝试移植代码库的小片段)。

是否有一种编译为 JS 的语言可以生成简洁的 JavaScript 并很好地缩小(尤其是使用 Google Closure),同时使开发过程变得更容易?或者我们最好还是坚持手写 JS?

如果手写 JS 是可行的方法,那么是否有任何工具或技术可以使输出大小产生特别大的差异? Google 的闭包库看起来很有趣,因为它们和我们自己的代码之间的功能有很多重叠,但好处一定是巨大的,因为切换到这个库需要做很多工作。

最佳答案

如果您正在考虑非 JS 语言选项,您应该考虑简单地使用与 Closure Compiler 的高级优化兼容的风格的带注释的 JS。这可能会为您提供最小的代码大小,同时仍然能够利用纯 JS 库。

对于更广泛的选择,我听说过有关 JSX 和 UberScript(类型增强的 CoffeeScript)的好消息,它们都生成合理的 Closure Compile 风格的 javascript。

通过源映射进行源级调试应该会降低底层 JS 源的“美观度”。我不知道这两个项目的 Source Maps 的状态。 Dart、GWT 和 Closure Compiler 都会生成它们。

关于javascript - 选择以输出大小为优先级的 Compile-to-JS 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11907162/

相关文章:

javascript - android studio 中的错误 getMap() map.setMyLocationEnabled(true);

javascript - 在源上运行测试,然后在其缩小版本上运行

javascript - js函数不改变值

javascript - 在加载 JavaScript 时将值替换为图像

node.js - 如何为 hubot 设置 node_path

node.js - 如何使用 Mongoose findOne

javascript - requestAnimFrame 堆栈溢出 PIXI js

javascript - 关于如何使用 Google Closure Compiler 组合多个没有任何优化的 javascript 文件的想法?

javascript - Google Closure 编译器无法识别类型注释

javascript - 哪些 JavaScript 库不依赖文档和导航器对象?