如何降低 App 的主機託管費用
要降低託管費用,首先要找出實際在運行的是什麼,以及原因為何,接著讓所有東西在沒有人使用時休眠。在支援縮減至零的主機上,閒置的 App 與休眠的資料庫幾乎不花錢,因此最大的節省通常來自移除那些讓它們保持清醒的東西——最常見的就是每隔幾秒就檢查資料庫的程式碼——然後再縮減頻寬,並刪除沒人使用的 App。
大多數小型 App 的問題不是流量太大,而是「有某樣東西一直在運作」。本指南會說明如何找到並修正這個問題,並附上可以交給 AI App 建置工具的提示詞。
你實際付費的項目
小型 App 的託管帳單來自少數幾個項目。知道哪一項金額最大,就知道該從哪裡著手。
| 費用項目 | 影響因素 | 常見解法 |
|---|---|---|
| 運算(伺服器) | 機器規格大小,以及運行的時數 | 讓它休眠;選擇適當的規格 |
| 資料庫 | 資料庫大小,以及它醒著的時間長度 | 停止持續查詢,讓它能夠休眠 |
| 頻寬 | 訪客下載的資料量 | 壓縮圖片、快取檔案 |
| 儲存空間 | 你保存的檔案與資料 | 刪除不需要的舊上傳檔案、記錄與備份 |
| 第三方 API | 呼叫 AI 模型、地圖、電子郵件、簡訊的次數 | 快取結果,設定使用上限 |
許多現代主機(包括 Mythex)都支援縮減至零:當沒有人使用 App 時,伺服器會停止運作,運算費用為零,等到下一次有人造訪時再喚醒。這使得問題從「我的伺服器要多大?」變成「我的伺服器為什麼一直醒著?」
步驟 1:查看費用都花在哪裡
在改動任何東西之前,請打開主機的用量頁面,找出:
- 哪個專案花費最多。通常一個 App 就佔了大部分帳單。
- 哪個類別:運算、資料庫、頻寬或儲存空間。
- 何時產生費用。深夜沒有任何使用者時仍然平穩地持續計費,就是某樣東西讓 App 保持清醒的線索。
在 Mythex 上,用量明細會顯示過去 30 天的使用狀況,分為 Build(AI Agent)與 Run(託管、頻寬、資料庫與檔案儲存),並依專案細分。
步驟 2:讓閒置的 App 與資料庫休眠
對大多數小型 App 來說,這是最有效的方法。閒置時會休眠、並在下一次請求時喚醒的資料庫,在非尖峰時段幾乎不花錢。而每隔幾秒就被查詢的資料庫永遠不會閒置,所以你全天都在付費。
Mythex 的主機限制詳細說明了已發布 App 的運作方式:休眠中的 App 不產生運算費用;資料庫以最小規格啟動,忙碌時逐漸擴增,閒置 5 分鐘後休眠,並依其規格乘以醒著的時間計費。因此,一個每隔幾分鐘(無論白天或夜晚)就查詢一次資料庫的 App,會被當成一直在忙碌;而沒有背景活動的同一個 App,費用則非常低。
以下是常見讓 App 保持清醒的原因:
- 輪詢。 頁面每隔 2 到 5 秒詢問伺服器「有新東西嗎?」只要一台筆電開著這個分頁,資料庫就永遠不會休眠。
- 自動重新整理的儀表板,即使沒有人在看,也會按照計時器重新載入資料。
- 運作時間監控,每分鐘 ping 一次 App。
- 伺服器程式碼中的背景迴圈,例如一個永遠在清理或同步資料的
setInterval。 - 排程的「保持連線」請求,有人為了避免首次造訪變慢而加入。這些請求的作用是阻止休眠,而這正是最花錢的原因。
請讓 AI 幫你找出它們:
檢查程式碼中是否有任何依計時器執行或反覆查詢資料庫的項目:輪詢、setInterval、自動重新整理、背景迴圈。列出每一項、它的執行頻率,以及在沒有人開啟頁面時是否仍會執行。目前先不要修改任何東西。
接著逐一修正:
儀表板每 3 秒輪詢一次 /api/orders。請改成只在瀏覽器分頁可見時才重新整理,並把間隔從 3 秒改為 60 秒。另外新增一個手動重新整理按鈕。
如果你的 App 真的需要即時更新(例如聊天或即時比分),請詢問它能否只在有變化時才推播更新,而不是不斷地詢問。對許多 App 來說,「使用者回到分頁時再重新整理」就已經足夠。
步驟 3:選擇適當的伺服器規格
規格越大,每小時的費用越高。許多由 AI 建置的 App 一開始使用的預設規格就夠用;問題常出在為了解決「本來是查詢寫得太慢」的效能問題,而去要求「更多運算能力」。
- 保持能夠正常服務你流量的最小規格,且不會出現錯誤。
- 如果看到記憶體當機,先請 AI 檢查 App 是否把過多資料載入記憶體(例如整張資料表,而不是一頁的結果)。
- 只有在量測到的流量確實需要時,才增加機器數量。
在 Mythex 上,機器規格會在發布時依 App 的需求自動選擇,額外的機器只會在流量很大時啟動,流量下降後又會回到休眠。費用與規格成正比,所以如果你覺得規格過大,可以在對話中請求較小的規格。
步驟 4:減少頻寬
頻寬指的是訪客下載的資料量。圖片通常是其中最大的部分。
- 壓縮圖片,並提供 WebP 或 AVIF 等新格式。
- 將圖片調整為實際顯示的尺寸。一張 4,000 像素的照片被顯示為 400 像素的縮圖,會浪費掉大部分下載的資料。
- 對於首屏以下的圖片使用延遲載入。
- 快取靜態檔案(腳本、樣式、圖片),讓回訪的訪客不必重新下載。請參閱什麼是快取。
- 不要讓 App 在每次頁面瀏覽時都送出大型檔案。
檢查 App 中的每一張圖片。將它們調整為實際顯示的最大尺寸,轉換為 WebP,並對第一個畫面以下的內容使用延遲載入。請告訴我修改前後的總大小。
更快的頁面與更低的頻寬通常是相輔相成的,請參閱如何讓你的網站更快。
步驟 5:清理沒人使用的東西
- 取消發布舊的 App——測試部署、已結束的實驗、去年的活動網站。
- 刪除舊的上傳檔案、不需要的記錄與匯出檔。
- 刪除不再使用的共享預覽連結。 在 Mythex 上,開啟預覽連結會喚醒專案並使用你的點數,所以一個被遺忘、卻仍有人不斷開啟的連結仍然會產生費用。
- 移除未使用的服務——App 已不再呼叫的 API 伺服器或背景工作程式。
步驟 6:考慮靜態網站
如果你的網站沒有登入功能、沒有儲存使用者資料,也沒有伺服器邏輯——例如行銷網站、作品集、菜單——它就可以是一個靜態網站:由 CDN 提供的純檔案。不需要任何持續運行的伺服器或資料庫。在 Mythex 上,靜態網站在閒置時不會使用點數。
這個網站沒有登入功能,也沒有儲存資料。能否重建為沒有伺服器的靜態網站?我們會失去什麼?
步驟 7:留意付費的 API 呼叫
對於會呼叫 AI 模型、地圖或簡訊服務的 App,第三方帳單可能遠高於託管費用。
- 任何按次計費的功能都要求登入。
- 加入每位使用者的使用上限(請參閱什麼是速率限制)。
- 快取不會改變的答案,例如同一個地址的地理編碼結果。
- 在每個服務商設定消費上限或警示。
常見錯誤
- 憑猜測而非量測。 先檢查用量明細;最耗費的部分往往不是你以為的那樣。
- 買更大的伺服器來解決速度慢的問題。 缺少的資料庫索引或載入過多的資料,通常才是真正的原因。
- 對所有東西都做輪詢。 每一個每隔幾秒執行的計時器,都是資料庫無法休眠的原因。
- 為了讓 App「保持暖機」而 ping 它。 這會抵消縮減至零所帶來的節省。請接受首次造訪時的短暫喚醒,或刻意選擇持續運行並支付費用。
- 忘記舊的部署。 沒人使用、卻仍附帶資料庫與背景工作的 App,會悄悄累積費用。
- 未壓縮的圖片。 在小型網站上,這往往是單一最大的頻寬成本。
檢查清單
- 我知道哪個專案、哪個類別(運算、資料庫、頻寬、儲存空間)花費最多。
- 沒有任何東西在沒人查看時,每隔幾秒就輪詢資料庫。
- 儀表板以合理的間隔重新整理,或只在分頁可見時重新整理。
- 沒有運作時間監控或背景迴圈在無必要時讓 App 保持清醒。
- 伺服器是能正常運作的最小規格。
- 圖片已調整大小、壓縮並使用延遲載入;靜態檔案已快取。
- 舊的 App 已取消發布,舊的檔案已刪除,不再使用的預覽連結已移除。
- 沒有資料或登入功能的網站已改為靜態網站。
- 付費 API 具備登入、每位使用者上限,以及服務商的消費警示。
在 Mythex 上降低費用
Mythex 對建置與託管使用同一個點數餘額,因此託管方面省下的費用,可以留給建置使用。以下是幾個 Mythex 專屬的重點:
- 已發布的 App 與其資料庫在閒置時會休眠,並在下一次造訪時喚醒。資料庫閒置 5 分鐘後就會休眠,因此移除持續輪詢通常是最大的節省來源。
- Pro 方案的託管、資料庫、頻寬、檔案儲存與預覽沙盒費率為免費方案的一半;AI 費用則兩個方案相同。請參閱點數。
- 在餘額過低、可能導致已發布 App 暫停之前,你會收到電子郵件通知;暫停的 App 會保留其資料庫與檔案。
如需了解更完整的營運成本概況,請參閱建置一個 App 要花多少錢與什麼是網頁託管。
常見問題
我的 App 使用者不多,為什麼主機帳單卻很高?
通常是某些東西讓它保持清醒。例如每隔幾秒就查詢資料庫的程式碼、每分鐘 ping 一次的運作時間監控,或是被遺忘的背景迴圈,即使沒有任何訪客,也可能讓伺服器和資料庫全天候運行。
休眠中的 App 還會花錢嗎?
在支援縮減至零的主機上,休眠中的 App 幾乎不會產生運算費用,但你通常仍需支付已儲存資料的費用。在 Mythex 上,休眠中的已發布 App 不會產生任何運算費用,而其資料庫會在閒置 5 分鐘後休眠,並且只根據它醒著的時間計費。
輪詢會增加主機費用嗎?
每隔幾秒輪詢一次,代表資料庫永遠不會有閒置的時段,因此無法休眠。請降低輪詢頻率,只在有人看著頁面時才輪詢,或是改用推播方式主動更新,而不是不斷詢問。
靜態網站的託管費用是否比網頁 App 便宜?
通常是的。靜態網站只是透過 CDN 提供的檔案,沒有需要持續運行的伺服器或資料庫。如果你的網站沒有登入功能,也沒有儲存資料,把它做成靜態網站是最能省錢的方式之一。