簡體   English   中英

Heroku Slug 尺寸太大 - nodejs

[英]Heroku Slug Size too large - nodejs

這是我的第一個 heroku 應用程序...我看到我的 heroku slug 大小是 296MB...接近 300MB 的快速啟動時間令人不安。

這是一個安裝了 ejs、path 和 express 的 puppeteer 應用程序。 我有一堆 static 文件,但它們似乎沒有占用大部分空間..

我真的很感激這方面的幫助!

公共文件夾中的靜態文件

編輯:我的 package.json 現在看起來像這樣(看不出我如何真正削減我的 node_modules - 事實上,我想在進一步開發我的應用程序時添加更多依賴項):

    "scripts": {
    "start": "node server.js",
    "heroku-postbuild": "curl -sf https://gobinaries.com/tj/node-prune | PREFIX=. sh&&./node-prune"
  },
  "dependencies": {
    "ejs": "^3.1.5",
    "express": "^4.17.1",
    "path": "^0.12.7",
    "puppeteer": "^5.3.1"
  }

在評論中的所有討論之后,我意識到一件事:您不能在 Heroku dynos 中刪除文件夾! 而且您可能無論如何都不想...這些文件夾看起來很重要(請記住:Heroku dynos 通常是迷你 linux 操作系統,因此.apt文件夾可能包含其中一些迷你 linux 操作系統文件)。 當然,那些.apt.heroku文件夾可能不會增加您的 slug 大小。 對不起,那次大雁追逐。

所以? 讓我們減少真正重要的東西的大小。

第一:減少你的node_modules大小。

由於您的node_modules文件夾是您可以控制的最大文件夾,讓我們從那里開始。 我們將關注這篇文章。 我將修改一些指令,以便它們與 Heroku 一起使用。

  1. 減少依賴項的數量:這聽起來很簡單,但它有很大幫助。 想想你安裝的包。 你真的需要它們嗎? 如果你這樣做了,是否有一個更輕量級的包可以替代? 例子:

很多時候我看到人們安裝 Jest 只是為了簡單的單元測試(大約 460 多個依賴項,+/-60MB),而當有更小的庫可以做完全相同的事情時(Mocha – 115 個依賴項,12MB)。 2.刪除不必要的文件:除了安裝包時通常安裝的文件( .js文件等),還有很多......包括不需要的垃圾( README s、 CHANGELOG s、源文件......)。 因為您無法手動刪除這些文件(以及誰想要刪除),所以您需要使用自動化工具和Heroku 構建腳本 這是一個示例(將其放入package.json時刪除注釋)。

"scripts": {
  // Other scripts...
  // The following script dowloads node-prune (https://github.com/tj/node-prune)
  // in the current build directory and runs it.
  // The following script is run AFTER Heroku installs dependencies, but BEFORE
  // Heroku caches them.
  // EDIT: You have to do `./node-prune` instead of `node-prune`.
  "heroku-postbuild": "curl -sf https://gobinaries.com/tj/node-prune | PREFIX=. sh&&./node-prune"
}

安恩...

這就是你所能做的。 那篇文章中提到的其他步驟對 Heroku 沒有幫助。 正如您已經提到的,您的靜態文件並沒有真正占用太多空間——它實際上只是node_modules 我想不出任何其他方法來減少您的 slug 大小(除非您想將靜態文件移動到外部存儲設施並執行一些模糊的獲取和緩存操作以將它們提供給客戶端......)。

注意:我還沒有嘗試過這些步驟中的任何一個。 這些理論上應該有效,但我不確定它們是否有效。

由於 Puppeteer 占用了如此多的 Heroku slug 大小,因此幾乎沒有回旋余地。 目前,堅持使用 Node 12 和 Puppeteer 2.0.0 將確保您可以設法將 Heroku slug 大小保持在 300M 以下。

在 package.json 中使用這些:

"dependencies": {
    "puppeteer": "2.0.0"
}

"engines": {
    "node": "12.x"
}

如果你升級 node 或 puppeteer 的版本號,即使你的其他依賴很少,你的 slug 大小也會超​​過 300M。

我使用 Puppeteer 2.0.0 的另一個原因是我需要使用 waitForFileChooser() 函數將媒體文件上傳到某些網站。 但是 waitForFileChooser() 在 Puppeteer 2.1.1 中被破壞了。 而且它在 5.5.0 中仍然被破壞。

另外,我認為 Node 12 和 Puppeteer 實際上非常穩定。 所以我可以接受一點版本延遲,以幫助 Heroku 管理其出色的免費服務的成本。

我想加入這個討論,因為我遇到了同樣的問題,並且因為 500MB 的限制而無法讓它工作而感到非常沮喪。 我嘗試了各種方法來減少它,但我發現即使我將它減小到 500MB 以下,性能也會大大降低。 所以我決定做的是為 Puppeteer 提供一個單獨的專用服務器,並從我的代碼庫中完全刪除 Puppeteer 部分,這將我的 slug 大小減少了 200+MB。 看一看: https://github.com/davidjuhyung/puppeteer-api

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM