选择以输出大小为优先级的编译到 JS 语言

Choosing a Compile-to-JS language with output size as a priority

本文关键字:编译 JS 语言 优先级 输出 小为 选择      更新时间:2023-09-26

我目前正在使用一个大型的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)的好东西,它们都产生了合理的闭包编译风格的javascript。

通过源映射进行源代码级调试应该使底层JS源代码的"漂亮"不那么相关。 我不知道这两个项目的源映射状态。 Dart,GWT和Closure Compiler都产生它们。