5

我尝试了 fay-jquery 并且包含的​​示例 test.hs 文件导致了 150 kb 的 js 文件。即使使用闭包编译,它仍然是 20 kb。

我知道它必须带有运行时、stdlib 和 jquery 包装器。

我可以告诉 fay 不要生成 std​​lib(--no-stdlib 和 --no-builtins 标志)。但我不知道如何告诉它不包含 jquery 代码。

所以我的问题是,我怎样才能将这些静态部分拆分成一个单独的 js 文件并且只生成特定于模块的代码?

这样大部分代码将只加载一次(并缓存),我可以为单独的网页创建许多较小的 js 文件。

4

1 回答 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在类型中使用,或者通过在编译时确定其中很多是不必要的,或者在编译器的输出中更多地抽象转换。

几天前我意识到的另一个可能的问题是输出现在在全局范围内而不是在闭包中,这可能意味着谷歌闭包不能像以前那样删除冗余代码(没有时间调查这还)。可能应该更改模块生成以为每个模块生成一个闭包。

另请参阅wiki 上的减少输出大小。

于 2013-09-09T21:36:42.343 回答