我尝试了fay,其中包含的示例test.hs文件导致了150 kb的js文件。即使进行闭包编译,它仍然是20 kb。
我理解它必须带有运行时、stdlib和jquery包装器。
我可以告诉fay不要生成stdlib (--no-stdlib和--no-builtins标志)。但我不知道如何告诉它不要包含jquery代码。
因此,我的问题是,如何将这些静态部分分割成一个单独的js文件,并且只生成特定于模块的代码?
这样,大部分代码将只加载一次(并缓存),我可以为不同的网页创建许多较小的js文件。
发布于 2013-09-09 21:36:42
是的,可以安全地将模块拆分,从Fay 0.16开始,所有模块都可以独立存在(在此之前,仍然可以将运行时和fay基分离)。这里有一些标志,--print-runtime和--no-stdlib。使用优化编译(-O,这增加了输出大小,但是闭包将能够更好地最小化它)。
还请记住,web服务器应该将其gzip。这使得代码大小降低到4.5kiB。很不错,对吧?
您可能需要考虑将所有的javascript放在一个文件中,这意味着初始加载速度较慢,但是用户将为以后的页面加载缓存它。
文件大小这么大的原因是fay-jquery有很多FFI绑定,这会产生大量的转码信息。我认为可以在这里对fay-jquery进行很多优化,例如在类型中使用Ptr JQuery而不仅仅是JQuery,或者在编译时找出很多这样的东西是不必要的,或者在编译器的输出中抽象更多的转换。
我几天前意识到的另一个可能的问题是,输出现在处于全局范围,而不是处于闭包状态,这可能意味着google闭包不能像以前那样删除冗余代码(还没有时间对此进行调查)。也许应该修改模块生成,以便为每个模块生成一个闭包。
还可以在wiki上看到缩小输出尺寸。
https://stackoverflow.com/questions/18702652
复制相似问题