haskell - 减小 Snap 二进制文件的大小?

标签 haskell haskell-snap-framework

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

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

最佳答案

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

$ cabal install --enable-split-objs

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

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

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

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

关于haskell - 减小 Snap 二进制文件的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11304634/

相关文章:

haskell - 如何在 haskell 中为这棵树实现 monoid 接口(interface)?

haskell - 如何理解Snaplet中RST、Lenses、Lens的抽象?

haskell - 依赖类约束的不明确类型变量

haskell - 如何使用 JuicyPixels 写入像素? (在 ST monad 中)

c++ - 是否有 O(1) 的方式让 Haskell 读取 C 风格数组?

haskell - 加速 GHC 中的编译

haskell - 惯用的 io-streams 目录遍历

haskell - 如何处理错误 "No instance for (Control.Monad.IO.Class.MonadIO [])"?

haskell - 快照框架 : Compiled splices and processing forms with digestive functors

Haskell, Snap : Simple snaplet construction. 我们什么时候使用 snaplet,什么时候使用库?