fay生成文件的大小

时间:2013-09-09 16:20:34

标签: haskell fay

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

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

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

所以我的问题是,如何将这些静态部分拆分为单独的js文件并仅生成特定于模块的代码?

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

1 个答案:

答案 0 :(得分:1)

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

还要记住,Web服务器应该gzip这个。这使代码大小降至4.5kiB。那很不错,对吧?

您可能需要考虑将所有javascript放在一个文件中,这意味着初始加载速度较慢,但​​用户会将其缓存以备将来的页面加载。

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

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

另请参阅维基上的Reducing output size