בקרה אוטומטית על גודל ה-Bundle ב-CI/CD: הגדרה ואופטימיזציה

גידול בגודל ה-JS bundle לרוב לא מורגש עד לשלב ה-deployment, כשהביצועים כבר נפגעים. אנחנו מגדירים בקרה אוטומטית על גודל ה-bundle ב-CI/CD שלכם, כך שנסיגות נתפסות כבר בשלב ה-pull request. הצוות שלנו מספק את הפרויקט במפתח מלא—מבחירת הכלים ועד ליישום ותמיכה, ומבטיח הגנה אמינה מפני נפיחות קוד.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
בקרה אוטומטית על גודל ה-Bundle ב-CI/CD: הגדרה ואופטימיזציה
פשוט
מ- 1 יום עד 3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

הצמיחה של ה-bundle לא מורגשת — אנחנו עוזרים לכם לשלוט בה

הוספתם תלות אחת, קולגה ייבא utility שלם — וחודש לאחר מכן ה-JS bundle גדל ב-200 KB. LCP ירד ב-30%, והאשם לא נמצא בשום מקום. ב-80% מהפרויקטים, מפתחים שמים לב לבעיה רק לאחר העלייה לייצור. בדיקות אוטומטיות של גודל ה-bundle ב-CI/CD עוצרות את ההידרדרות לפני שהיא מגיעה לשחרור. המהנדסים שלנו, עם ניסיון של 5+ שנים, מקימים בקרה כזו עבור ה-stack שלכם. ייעוץ ראשוני זמין. צרו קשר לבדיקת bundle.

אילו בעיות אנחנו פותרים

  • צמיחה בלתי נראית של ה-bundle — כל תלות חדשה מגדילה את הגודל, אבל זה לא נראה ב-PR עד ש-LCP קופץ ב-30%. לדוגמה, ייבוא של lodash במלואו במקום lodash.get מוסיף 20 KB ב-gzip.
  • כפילות קוד — אותה ספרייה ב-chunks שונים לאחר code splitting, מה שמגדיל את הגודל הכולל ב-10-15%.
  • Bundle ראשוני מנופח — lazy loading לא מוגדר; המשתמש מוריד הכל בבת אחת, מה שמגדיל את TTI ב-2 שניות.
  • חוסר baseline — בלי היסטוריית גודל, קשה לעקוב איזו גרסה גרמה לרגרסיה.

איך זה עובד

בכל PR או deployment, אנחנו בונים את ה-bundle, משווים את הגודל שלו ואת גדלי ה-chunks הבודדים מול baseline — ערכים מה-deployment הקודם או מגבלות קבועות. אם הסף נחצה, CI נכשל או משאיר אזהרה ב-PR. זה יכול לחסוך עד $500 בחודש על תחזוקת ביצועים.

הכלים מתחלקים לשתי קטגוריות:

כלי גישה מתי להשתמש
bundlesize / bundlewatch השוואת מגבלות קבועות פרויקטים פשוטים, הגדרה מהירה
size-limit (NEAR Protocol) מגבלות + ניתוח ייבוא ספריות JS, חבילות npm
Webpack Bundle Analyzer ויזואליזציה, ללא חסימת CI בדיקה ידנית
Vite rollup-plugin-visualizer אותו דבר עבור Vite בדיקה ידנית
Relative CI / BuildBuddy השוואת PR מול ענף הבסיס פרויקטים צוותיים, ממשק עשיר

איך bundlewatch עוזר לשלוט בגודל ה-bundle

התקינו אותו:

npm install --save-dev bundlewatch 

הגדירו ב-npm install --save-dev bundlewatch :

{
  "bundlewatch": {
    "files": [
      {
        "path": "dist/assets/index-*.js",
        "maxSize": "150kB"
      },
      {
        "path": "dist/assets/vendor-*.js",
        "maxSize": "400kB"
      },
      {
        "path": "dist/assets/*.css",
        "maxSize": "50kB"
      }
    ],
    "ci": {
      "trackBranches": ["main", "master"],
      "repoBranchBase": "main"
    }
  }
}

ב-GitHub Actions:

---
name: Bundle Size Check
on: [pull_request]
jobs:
  bundlewatch:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - run: npm ci
      - run: npm run build
      - run: npx bundlewatch
        env:
          BUNDLEWATCH_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CI_REPO_OWNER: ${{ github.repository_owner }}
          CI_REPO_NAME: ${{ github.event.repository.name }}
          CI_COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
          CI_BRANCH: ${{ github.head_ref }}
          CI_BRANCH_BASE: ${{ github.base_ref }}
---

bundlewatch משאיר תגובה ב-PR עם טבלה: גודל נוכחי, דלתא, סטטוס. פרטים נוספים ב-bundlewatch.

הגדרת size-limit: עמוק יותר מסתם מגבלות

package.json מנתח את עץ הייבוא: מציג משקל מודול תוך התחשבות ב-tree-shaking וב-gzip.

npm install --save-dev size-limit @size-limit/preset-app 

{ "bundlewatch": { "files": [ { "path": "dist/assets/index-*.js", "maxSize": "150kB" }, { "path": "dist/assets/vendor-*.js", "maxSize": "400kB" }, { "path": "dist/assets/*.css", "maxSize": "50kB" } ], "ci": { "trackBranches": ["main", "master"], "repoBranchBase": "main" } } } :

[
  {
    "path": "dist/assets/index-*.js",
    "limit": "150 kB",
    "gzip": true
  },
  {
    "name": "Vendor chunk",
    "path": "dist/assets/vendor-*.js",
    "limit": "380 kB",
    "gzip": true
  }
]

ב-name: Bundle Size Check on: [pull_request] jobs: bundlewatch: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: npm - run: npm ci - run: npm run build - run: npx bundlewatch env: BUNDLEWATCH_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CI_REPO_OWNER: ${{ github.repository_owner }} CI_REPO_NAME: ${{ github.event.repository.name }} CI_COMMIT_SHA: ${{ github.event.pull_request.head.sha }} CI_BRANCH: ${{ github.head_ref }} CI_BRANCH_BASE: ${{ github.base_ref }} :

{
  "scripts": {
    "size": "size-limit",
    "analyze": "size-limit --why"
  }
}

size-limit מריץ את npm install --save-dev size-limit @size-limit/preset-app ומראה בדיוק מה מושך את הגודל.

למה מגבלות יחסיות נוחות יותר מאשר מוחלטות?

מגבלות מוחלטות מתיישנות ככל שהפרויקט גדל, והעלאה מתמדת של המספרים היא מייגעת. חלופה: בדיקת דלתא מול ענף הבסיס. אנחנו משתמשים בסקריפט שמשווה את גודל הענף הנוכחי עם הבסיס. הסקריפט בונה, שומר את הגודל הנוכחי, מביא את גודל ענף הבסיס מ-CI artifacts, ומחשב את הדלתא. אם הדלתא עולה על 10%, CI נכשל. גישה זו חוסכת זמן הגדרה ואינה דורשת עדכון ידני של מגבלות.

מה לבדוק מלבד הגודל הכולל

  • מספר ה-chunks — גידול במספר ה-chunks מ-code splitting יכול להגדיל בקשות HTTP.
  • גודל ה-bundle הראשוני בנפרד מה-chunks של lazy loading — זה משפיע על LCP ו-TTI.
  • כפילויות תלויות — כאשר ספרייה אחת נמשכת למספר chunks בגרסאות שונות. נתחו עם .size-limit.json או [ { "path": "dist/assets/index-*.js", "limit": "150 kB", "gzip": true }, { "name": "Vendor chunk", "path": "dist/assets/vendor-*.js", "limit": "380 kB", "gzip": true } ] .

השוואת גישות: bundlewatch מול size-limit

פרמטר bundlewatch size-limit
מורכבות הגדרה נמוכה (5 דקות) בינונית (קונפיגורציית JSON)
סוג מגבלה מוחלטת מוחלטת + יחסית
ניתוח ייבוא לא כן (tree-shaking)
התראות PR תגובה עם טבלה תגובה + דגל
המלצה התחלה מהירה שליטה עמוקה

טעויות נפוצות ואיך להימנע מהן

חלק מהצוותים שוכחים להגדיר caching, מה שהופך את הבדיקה ל-5+ דקות. אנחנו שומרים ב-cache את package.json ו-{ "scripts": { "size": "size-limit", "analyze": "size-limit --why" } } , ומצמצמים את הזמן ל-40–60 שניות. טעות נוספת היא הגדרת מגבלות "בעין". הדרך הנכונה: מדדו גדלים נוכחיים והגדירו buffer של 10–15%.

מה כלול בעבודה

  • בדיקת ה-bundle הנוכחי וזיהוי אזורים בעייתיים.
  • הגדרת הכלי הנבחר (bundlewatch או size-limit) עם מגבלות מותאמות.
  • אינטגרציה ל-CI/CD (GitHub Actions, GitLab CI, Bitbucket Pipelines).
  • תיעוד של הקונפיגורציה ותהליך התחזוקה.
  • הדרכת צוות על עבודה עם התראות וניתוח.
  • תמיכה לאחר השחרור למשך חודש.

לוח זמנים משוער

הגדרה בסיסית של bundlewatch ב-pipeline CI קיים אורכת 4 עד 8 שעות. הגדרת size-limit עם ניתוח והתראות PR אורכת 1 עד 2 ימי עבודה. העלות מחושבת באופן אישי לאחר הערכת הפרויקט שלכם. קבלו ייעוץ — נספר לכם איזו אפשרות אופטימלית. הזמינו בדיקת bundle, ואנחנו נציע פתרונות קונקרטיים.