Haskell 减小快照二进制文件的大小?

Haskell 减小快照二进制文件的大小?,haskell,haskell-snap-framework,Haskell,Haskell Snap Framework,当我编译我的webapp(将其部署到生产服务器)时,它的容量达到19MB! 有什么好处?这正常吗?我做错什么了吗 我的网站基本上只有3个静态页面。我想Snap有很多依赖性。不幸的是,这个问题的一个解决方案会影响(初始)编译时间,它是使用--split objs选项安装项目所依赖的库。这将生成大量不同的对象,但会使最终的可执行文件小很多,比如2-4倍 $ cabal install --enable-split-objs 如果已经安装了库,则需要先删除它们,安装一个新的GHC或使用沙盒和它自己的

当我编译我的webapp(将其部署到生产服务器)时,它的容量达到19MB! 有什么好处?这正常吗?我做错什么了吗


我的网站基本上只有3个静态页面。

我想Snap有很多依赖性。不幸的是,这个问题的一个解决方案会影响(初始)编译时间,它是使用--split objs选项安装项目所依赖的库。这将生成大量不同的对象,但会使最终的可执行文件小很多,比如2-4倍

$ cabal install --enable-split-objs
如果已经安装了库,则需要先删除它们,安装一个新的GHC或使用沙盒和它自己的包集

您还应该使用
strip
命令(阴谋集团在某些情况下会自动执行此操作)

另外,您可以考虑使用<代码> Upx<代码>压缩可执行文件,最后使用代码> RSyc < /Cord>将最小可执行文件上传到服务器。


使用共享库(
cabal install--enable shared
)可能有帮助,也可能没有帮助:我没有尝试过这个选项。

这是个问题吗?使用共享库会让你感觉更好吗,每次我想做一个小小的改变时,我都必须通过慢速
scp
连接将20MB上传到我的EC2实例……所以听起来你应该使用共享库来消除重复。@ThomasM.DuBuisson:你能把它扩展成一个答案吗?或者你可以在传输之前用
xz
压缩可执行文件并之后将其解压缩。。。或者使用
xz-c9 a.out | ssh-v ec2-host.amazon.com“xz-cd>a.out”
一次性完成。这将我的设备上的一个简单的hello world应用程序从16MB减少到1.6MB。我应该在本地服务器和生产环境上都这样做吗?或者仅仅是确保Haskell的产量足够?我在snap项目上尝试了
--启用拆分objs
--启用共享
,但两种方法都不起作用。二进制文件大小完全相同。@drozzy您需要使用这些选项构建项目所依赖的库。只是重新编译你的项目不会有多大用处。为此,我建议从GHC的干净安装开始,或者为此使用沙箱解决方案(如virthualenv或其他)。谢谢,然后我是否需要在我的生产服务器上安装GHC和所有依赖项?你用过类似的东西吗?