【问题标题】:Reduce the size of the Snap binary?减小 Snap 二进制文件的大小?
【发布时间】:2012-07-03 04:48:59
【问题描述】:

当我编译我的Snap webapp(将其部署到生产服务器)时,它达到了 19MB! 是什么赋予了?这是正常的吗?我做错了吗?

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

【问题讨论】:

  • 这是一个问题吗?使用共享库会让你感觉更好吗?
  • 好吧,每次我想进行微小的更改时,我都必须通过慢速 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 haskell-snap-framework


【解决方案1】:

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

$ cabal install --enable-split-objs

如果您已经安装了这些库,则需要先将其删除,然后安装新的 GHC 或使用带有自己的包集的沙箱。

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

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

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

【讨论】:

  • 我应该在本地服务器和生产环境中都这样做吗?或者只是确保生产有 Haskell 就足够了?
  • 我在我的快照项目中尝试了--enable-split-objs--enabled-shared,但似乎都没有。二进制文件的大小完全相同。
  • @drozzy 您需要使用这些选项构建项目所依赖的库。仅仅重新编译你的项目不会有太大的作用。为此,我建议从全新安装 GHC 开始,或者为此使用沙盒解决方案(例如 virthualenv 或其他东西)。
  • 谢谢,然后我需要在我的生产服务器上安装 GHC 和所有依赖项吗?你用过bsdiff之类的东西吗?
猜你喜欢
  • 2023-01-02
  • 2011-10-09
  • 2018-01-30
  • 1970-01-01
  • 2014-11-18
  • 2018-10-22
  • 2014-08-07
  • 1970-01-01
  • 2011-12-27
相关资源
最近更新 更多