ميزانيات الأداء: تحديد حدود حجم الحزمة مع Webpack و Lighthouse
تحديد وفرض ميزانيات الأداء مع Webpack و Lighthouse CI ومحللات الحزم. يغطي الاختبار الآلي وتكامل CI/CD ومساءلة الفريق.
مقدمة
ميزانيات الأداء هي قيود تساعد الفرق على الحفاظ على أداء التطبيق بمرور الوقت. بدونها، تتزايد أحجام الحزم وتتدهور المقاييس ويعاني المستخدمون.
إنشاء ميزانيات الأداء
أنواع الميزانيات
interface PerformanceBudget { // قائمة على الكمية maxBundleSize: number; // حجم حزمة JS الإجمالي maxInitialBundleSize: number; // JS الأولي/الحرج maxImageSize: number; // حد لكل صورة // قائمة على الوقت maxTimeToInteractive: number; // TTI بالميلي ثانية maxLargestContentfulPaint: number; // LCP بالميلي ثانية // قائمة على النتيجة minLighthousePerformance: number; // 0-100 } const budget: PerformanceBudget = { maxBundleSize: 250 * 1024, // 250 KB maxInitialBundleSize: 100 * 1024, // 100 KB maxLargestContentfulPaint: 2500, // 2.5 ثانية minLighthousePerformance: 90, };
تحليل الحزمة
التحقق من حجم الحزمة في CI
name: التحقق من حجم الحزمة on: [pull_request] jobs: bundle-size: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: npm ci - name: Build run: npm run build - name: Check bundle size uses: preactjs/compressed-size-action@v2
تكامل Lighthouse CI
التكوين
module.exports = { ci: { collect: { url: ['http://localhost:3000/'], numberOfRuns: 3, }, assert: { assertions: { 'categories:performance': ['error', { minScore: 0.9 }], 'largest-contentful-paint': ['error', { maxNumericValue: 2500 }], 'cumulative-layout-shift': ['error', { maxNumericValue: 0.1 }], }, }, }, };
المراقبة الآلية
التنبيه عند التراجع
async function checkAndAlert(metrics: PerformanceMetrics) { const violations: string[] = []; if (metrics.bundleSize > budget.maxBundleSize) { violations.push(`حجم الحزمة يتجاوز الميزانية`); } if (violations.length > 0) { await sendSlackAlert({ channel: '#performance-alerts', text: `⚠️ انتهاكات ميزانية الأداء`, }); } }
استراتيجيات التحسين
تقسيم الكود
// التقسيم القائم على المسار const routes = [ { path: '/', component: lazy(() => import('./pages/Home')), }, { path: '/blog', component: lazy(() => import('./pages/Blog')), }, ];
هز الشجرة
// ❌ يستورد المكتبة بالكامل import _ from 'lodash'; // ✅ يستورد فقط ما يحتاجه import debounce from 'lodash/debounce';
الخلاصة
ميزانيات الأداء تنجح عندما:
- محددة بوضوح: أرقام محددة، وليس أهدافاً غامضة
- إنفاذ آلي: CI/CD يحظر الانتهاكات
- مراقبة مستمرة: RUM في الإنتاج
- موافقة الفريق: الجميع يفهم الأهمية
- مراجعة منتظمة: ضبط الميزانيات حسب الحاجة
الأداء ميزة. الميزانيات تضمن عدم أخذها عن طريق الخطأ من المستخدمين.
مقالات ذات صلة
الأداء وتحسين محركات البحثقراءة 21 دقيقة
كيفية تحسين Core Web Vitals: دليل تحسين LCP و FID و CLS
تحسين درجات Core Web Vitals مع تقنيات تحسين LCP و FID و CLS العملية. مقاييس قبل/بعد حقيقية من تطبيقات React و Next.js الإنتاجية.
هندسة الواجهاتقراءة 19 دقيقة
تحسين أداء React: useMemo و useCallback و Code Splitting (2024)
تحسين أداء React مع useMemo و useCallback و code splitting. مقاييس أداء حقيقية وأنماط من تطبيقات إنتاجية واسعة النطاق.
الأداء وتحسين محركات البحثقراءة 19 دقيقة
SEO التقني للمطورين: Schema Markup و Meta Tags وسرعة الموقع
أتقن SEO التقني مع schema markup و meta tags وتحسين سرعة الموقع. يغطي canonical URLs و sitemaps وتنفيذ البيانات المهيكلة.
هندسة الواجهاتقراءة 20 دقيقة
بنية Micro-Frontends: تنفيذ Module Federation و Single-SPA
بناء micro-frontends مع Webpack Module Federation و Single-SPA. يغطي تنظيم الفريق والتبعيات المشتركة وأنماط النشر الإنتاجي.
هندسة الواجهاتقراءة 17 دقيقة
إدارة الحالة في React: مقارنة Redux مقابل Zustand مقابل Context API
قارن حلول إدارة الحالة في React: Redux Toolkit و Zustand و Context API. تعلم متى تستخدم كل منها مع أمثلة حقيقية واعتبارات الأداء.