2012-07-03 45 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