דילוג לתוכן הראשי
Hosting cost

Vercel

על מה Vercel גובה כסף, מה נעשה ב-28.10 כדי לשלם פחות, והעקרונות לכל פרויקט, שלנו ושל לקוח.

#vc-billing

על מה משלמים

כל השמות כאן הם השורות בעמוד Usage של הפרויקט: vercel.com/…/v0-project-overview/usage. בפרויקט של לקוח: אותו עמוד, בפרויקט שלו.

Build CPU Minutesדקות build כפול מספר הליבות של המכונה, החל מ-$0.0035 לדקת ליבה.אצלנו: build אחד כאן לוקח כדקה וחצי, ו-1,062 העמודים נבנים ב-6 שניות מתוכה. לכן מה שקובע הוא כמה builds רצים (npm run vc -- build).Managing Builds › Build machines
Deployment Storageהפלט של כל deployment שנשמר, תמונות ו-HTML, $0.10 ל-GB לחודש. גדל עם שלושה דברים: כמה deployments שמורים, הגודל של כל אחד, וכמה זמן הוא נשמר.Deployment Storage › PricingDeployment Storage › How usage grows
Function Storageאותו דבר לקוד השרת של כל deployment, באותו מחיר.אצלנו: ה-1,148 ברשימת Functions הם שורה לכל נתיב, כולן באותו גודל: חבילה אחת, לא חיוב לכל אחת.Deployment Storage › Pricing
השארFast Data Transfer, CDN Requests, Fast Origin Transfer, Fluid Active CPU, Function Invocations, ISR Reads ו-Writes, Web Analytics Events.אצלנו: כל אחת סנטים בעמוד Usage. התמונות לא עוברות Image Optimization של Vercel (images.unoptimized), אז אין עליהן חיוב.CDN pricing and usage

מה כל צעד מקטין

השמות הם השורות בעמוד Usage של הפרויקט. אחרי שינוי בודקים את השורה שלו שם, ביום-יומיים שאחרי.

הצעדמקטין אתכימקור
Retention של יוםDeployment Storage, Function Storageפחות עותקים שמורים בכל יום. ה-production האחרונים ומה שעליו כתובת חיה נשמרים בכל מקרה. לא נוגע ב-build.Deployment RetentionDeployment Retention › Exceptions
רק main בונהBuild CPU Minutes, Deployment Storageענף שכבוי ב-vercel.json לא יוצר deployment, אז אין build ואין עותק לשמור.Git Configuration › git.deploymentEnabled
דוחפים במנותBuild CPU MinutesVercel בונה בכל push. push עם עשרה commits הוא build אחד.Deploying Git Repositories
מכונה של 4 ליבותBuild CPU Minutesדקת build מחויבת כפול הליבות. עלינו: חצי מכל build הוא העתקה, cache ופריסה, שליבות נוספות לא מקצרות.Managing Builds › Build machines+ מדידה שלנו
תמונות דחוסות (AVIF)Deployment Storage, Fast Data Transferהגודל של כל עותק הוא אחד משלושת הדברים שמגדילים את השורה, ופחות בייטים יוצאים לכל מבקר. עם retention של יום החיסכון הוא סנטים: הרווח העיקרי הוא מהירות האתר.Deployment Storage › How usage growsCDN pricing and usage

push אחד = build של כל האתר

להחליף כותרת בדף הבית מ"שלום" ל"שלום רב" בונה מחדש את כל העמודים ומעלה עותק מלא של האתר. אין build של עמוד אחד. מה שנחסך הוא ה-cache: חבילות וקוד שכבר קומפל משוחזרים מה-build הקודם, ולכן זה כדקה וחצי ולא יותר. מילה אחת עולה כמו עמוד שלם. commit לא עולה כלום: מה שנספר הוא push.

איךbuildsעלות
200 שינויים, push אחרי כל אחד200כ-$10
200 שינויים, push אחד1כ-5 סנט

5 סנט ל-build: $23.24 חלקי 475 builds במחזור 11.10 עד 11.11. הדרך היחידה לשנות טקסט בלי build היא תוכן מחוץ לקוד (מערכת תוכן ורענון עמודים לפי דרישה). בפרויקט הזה התוכן בקוד.

Deploying Git RepositoriesManaging Builds › Build machines

#vc-pages

מתקפת דפים

Issue פתוח (5.11): האתר נהיה ענקי בשכפולים. ה-build ספר כ-1,141 עמודים כשהתוכן האמיתי קטן בהרבה: עמודי הדמו לבד היו 868. כל עמוד הוא עוד זמן build, ו-build הוא מה שעולה כסף (למעלה). אנחנו מנסים למצוא דרך.

  1. לשפר את מנגנון הווריאנטים ולאחד תוכן בפנימיים. דמו עם כמה דפי בית בנה את כל העמודים הפנימיים מחדש לכל בית. עכשיו יש סט פנימיים אחד, והבית נזכר בדפדפן (Shared Inner Pages, 6.11). ורשימה בונה רק כמה עמודי פריט לדוגמה, והשאר מקשרים אליהם (נדל״ן 60 נכסים ל-3, בלוג 54 כתבות ל-12): המלל בעמוד הפריט כללי, אז הוא זהה בכל מקרה.
  2. הקטנת תמונות ועוד. תמונות הדמואים מכווצות לפני שהן נכנסות לקוד (npm run shrink).

הספירה, לפי ה-build: 1,141 (5.11) ← 772 (6.11, אחרי האיחוד) ← 646 (6.11, עם עמודי הדוגמה: דמואים 868 ← 356). המספר המעודכן: npx next build, השורה Generating static pages.

#vc-done

מה נעשה

  1. רק main בונהvercel.json, git.deploymentEnabled. ענפים של Claude, v0 ו-dependabot לא יוצרים build. בתוקף מה-push שמביא את הקובץ.
  2. מכונה קבועה של 4 ליבותנשאר Elastic בכוונה (28.10): קודם מודדים את retention ו-main בלבד, כי שינוי של כמה דברים יחד לא מראה מה השפיע. אחר כך: Build and Deployment, Build Machine, Standard. מחיר: כ-15 עד 20 שניות יותר לכל publish, כ-40% פחות לכל build (הערכה).
  3. Retention של יום28.10, בממשק: Project Settings, Build and Deployment, למטה: Deployment Retention Policy. ארבעת הסוגים על יום. Vercel שומר בכל מקרה את ה-production האחרונים (לפחות 10) ואת מה שעליו כתובת חיה, אז rollback נשאר.
  4. Retention של יום כברירת מחדל של הצוות28.10: Team Settings, Build and Deployment, Deployment Retention Policy, עם Apply this policy to all existing projects. פרויקט לקוח חדש מתחיל ביום. אצל לקוח זה כמעט לא משנה (כל העותקים שלו נכנסים ב-10 האחרונים), אבל גם לא מזיק. זהירות: הסימון הזה דורס את ההגדרה של כל פרויקט קיים.
  5. דחיסת התמונות (AVIF)בפלט כ-125MB של תמונות בדמואים ו-56MB בתיקיית public, מתוכם כ-23MB שאף עמוד לא משתמש בהם. אחרי ה-retention זה בעיקר עניין של מהירות, לא של החשבון. הכלים ב-/docs/images.
  6. export const dynamic = 'force-dynamic'לא בוצע, בכוונה: הפרומפט המקורי הציע אותו לכל דמו, אבל יצירת כל העמודים היא 6 שניות מה-build, והוא היה מעביר את העלות לכל כניסה ומאט את האתר.

✅ נעשה · ⏸ אחרי המדידה · ⬜ עוד לא · ❌ לא בוצע, בכוונה

המדידה: שינוי אחד בכל פעם

לפני 28.10, בממוצע ליום: כ-28 builds, כ-$1.37 על Build CPU Minutes, כ-$0.38 על Deployment Storage. retention של יום פועל מ-28.10. "רק main בונה" פועל מה-push שמביא את vercel.json. כשבוע אחרי ה-push משווים את שתי השורות בעמוד Usage ומריצים npm run vc -- builds --days 7. רק אחר כך מחליפים מכונה, ושוב שבוע.

Deployment Retention Policy בהגדרות הפרויקט ב-Vercel: Canceled, Errored, Pre-Production ו-Production, כולם על 1 day
28.10: Project Settings, Build and Deployment, Deployment Retention Policy. היה 30 days בכל הארבעה.

#vc-rules

העקרונות

  • דוחפים במנות. כל push ל-main הוא build. push אחרי כל commit הגיע ב-11 וב-12.10 ליותר מ-100 builds ביום.
  • רק main בונה. הבדיקות רצות ב-GitHub על build משלהן. preview של ענף לא משמש אף אחד.
  • לא force-dynamic כדי לחסוך build. מספר העמודים הוא לא מה שיקר. עמוד דינמי מעביר את העלות לכל כניסה ומאט את האתר.
  • מכונה קטנה מספיקה. חצי מכל build הוא העתקה, שחזור cache, העלאה ופריסה. ליבות נוספות לא מקצרות אותם, אבל כן נספרות בחשבון.
  • Retention של יום. הקוד שמור ב-git, וכל גרסה נבנית מחדש בדקה וחצי. rollback צריך רק את האחרונים, ו-Vercel שומר אותם בכל מקרה. עמוד ה-retention בדוקס שלהם לא מזכיר מחיר: הוא בעמוד Deployment Storage.
  • תמונה נדחסת לפני commit. כל תמונה בפלט נשמרת מחדש בכל deployment.
  • סרטון קצר נשאר בפרויקט. שני סרטוני ה-hero (6.6MB) עולים כסנט לחודש באחסון, וכל ה-Fast Data Transfer של האתר היה 2 סנט. שירות חיצוני (Cloudflare, Cloudinary) שווה רק לסרטון ארוך של עשרות MB, לווידאו שהוא התוכן עצמו, או לאתר עם הרבה תנועה.
  • פרויקט של לקוח. לקוח עושה deploy לעתים רחוקות: ה-build כמעט לא עולה, וכל העותקים שלו נכנסים ב-10 האחרונים ש-Vercel שומר בכל מקרה, אז retention לא משנה אצלו. מה שכן: vercel.json מועתק, כדי שענפים לא יבנו.
// vercel.json: only main builds. "**" is every branch; a branch that
// matches both rules builds, because one of them says true.
{
  "git": { "deploymentEnabled": { "**": false, "main": true } }
}

#vc-terminal

מהטרמינל

הטוקן ב-~/.vercel-api/token.txt, מחוץ לריפו. נוצר ב-28.10 ל-60 יום, אז הוא פג בסביבות 27.12. טוקן חדש: vercel.com/account/settings/tokens, וה-Scope הוא הצוות. טוקן של Vercel נותן גישה מלאה, והסקריפט (scripts/vercel/vercel.mjs) רק קורא. שינוי הגדרה נעשה ידנית, או אחרי אישור.

npm run vc -- projectהמכונה, מדיניות ה-retention, Node. כאן רואים אם Vercel החליף מכונה לבד.
npm run vc -- builds --days 30כמה deployments, לפי יעד, מצב, ענף ויום, עם דקות build.
npm run vc -- buildציר הזמן של ה-build האחרון והמכונה שלו. אפשר להעביר מזהה dpl_ של build אחר.
npm run vc -- storedכמה deployments שמורים עכשיו ומאיזה תאריך. על זה Deployment Storage גובה.

#vc-start

נקודת הפתיחה, 27.10

מחזור החיוב
11.10 עד 11.11, אחרי 17 ימים
סה״כ
$31.69
Build CPU Minutes
$23.24 (115 שעות ליבה)
Deployment Storage
$6.49
Function Storage
$1.55
Deployments
475: 277 מ-main, 195 מענפים של Claude, 3 של dependabot
מכונה
8 ליבות. Vercel בחר אותה לבד (elastic) בגלל build ארוך אחד בעבר
Retention
30 יום לכל סוג (ברירת המחדל לצוות Pro חדש), 417 deployments שמורים
Usage בפרויקט ב-Vercel: 115 שעות Build CPU ו-65 GB-months של Deployment Storage
Usage, 27.10. העמודות הכחולות הן build.