生成的fay文件大小

5
我尝试了fay-jquery,并使用附带的sample test.hs文件,结果生成了高达150kb的js文件。即使使用闭包编译,它仍然有20kb。
我理解它必须带有运行时、stdlib和jquery包装器。
我可以告诉fay不生成stdlib(--no-stdlib和--no-builtins标志)。
但我不知道如何告诉它不包含jquery代码。
因此我的问题是,如何将这些静态部分拆分为单独的js文件,并仅生成模块特定的代码?
这样,大部分代码只会被加载一次(并缓存),我可以为单独的网页创建许多较小的js文件。
1个回答

1

从Fay 0.16开始,所有模块都可以独立存在,因此将模块拆分是安全的(在此之前,您仍然可以将运行时和fay-base分开)。有一些标志可以用于此操作,--print-runtime--no-stdlib。使用优化编译(-O),这会增加输出大小,但是闭包将能够更好地最小化它。

还要记住,Web服务器应该对其进行gzip压缩。这将使代码大小降至4.5kiB。这很不错,对吧?

您可能希望考虑将所有JavaScript放在一个文件中,这意味着较慢的初始加载,但然后用户将其缓存以供将来的页面加载。

文件大小如此之大的原因是fay-jquery具有许多FFI绑定,这会产生大量的转码信息。我认为fay-jquery在此方面可以进行大量优化,例如在类型中使用Ptr JQuery而不仅仅是JQuery,或者通过在编译器的输出中更抽象转换来找出许多这些内容是不必要的。

我几天前意识到的另一个可能存在的问题是,输出现在在全局作用域中而不是在闭包中,这可能意味着Google Closure无法像以前那样删除冗余代码(尚未有时间调查此问题)。每个模块的生成方式应该改为为每个模块生成一个闭包。

另请参见维基上的减小输出大小


我知道可以手动编辑JS文件并将它们拆分并单独加载。也许我的问题没有表达清楚。我想知道如何防止Fay生成所有这些代码,一旦我将其保存到单独的文件中?我尝试了包括你提到的在内的所有标志。结果文件仍然包含很多东西。我希望它只生成模块本身的代码,不包括任何stdlib和jquery。 - Vagif Verdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接