2012-07-03 42 views
3

当我编译我的Snap webapp(将其部署到生产服务器)时,它出现到19MB! 什么给?这是正常的吗?难道我做错了什么?减小Snap二进制文件的大小?

我的网站只有3个静态页面,基本上是snap's init project

+0

这是某种方式的问题吗?使用共享库会让你感觉更好吗? –

+0

那么,每次我想做一个小小的改变时,我必须通过慢速scp连接上传20MB到我的EC2实例...... – drozzy

+1

因此,听起来您应该使用共享库来删除重复。 –

回答

2

我猜Snap会引起很多依赖。这个问题的一个解决方案,不幸影响(初始)编译时间的是使用--split-objs选项安装库,您的项目依赖于。这将产生大量不同的对象,但会使最终的可执行文件变得更小,比2-4倍小。

$ cabal install --enable-split-objs 

如果您已经安装了这些库,你需要先删除它们,安装一个新的GHC或使用沙箱与它自己的包集合。

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

此外,您可以考虑使用upx来压缩可执行文件,最后使用rsync将最小差异可执行文件上传到服务器。

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

+0

我应该在本地服务器还是生产环境中执行此操作?或者只是确保Haskell的生产已经足够了? – drozzy

+0

我在我的快照项目上同时尝试了'--enable-split-objs'和'--enabled-shared',但都没有效果。二进制文件的大小完全相同。 – drozzy

+0

@drozzy你需要用这些选项来建立你的项目所依赖的库。只是重新编译你的项目不会有太大的作用。我建议从这个目的开始干净安装GHC或使用沙盒解决方案(如virthualenv或其他)。 – Tener