فحوصات Lighthouse الآلية
أضف GitHub Action الخاص بـ Lighthouse CI، وحدّد حدودًا لدرجات الأداء وإمكانية الوصول، وامنع عمليات الدمج التي تؤدي إلى تراجع Core Web Vitals
فحوصات Lighthouse الآلية درس مجاني في Frontend Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Frontend Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Frontend Academy 4 دروس في المجموع.
لماذا نؤتمت Lighthouse؟
تكشف عمليات Lighthouse اليدوية تراجعات الأداء متأخرًا، وعادةً بعد أن يشتكي مستخدم فعلي. تُشغّل Lighthouse CI الآلية في كل طلب سحب، وتفشل عمليات البناء التي تتراجع فيها المقاييس الأساسية، وتتتبع الدرجات بمرور الوقت. تعامل مع الأداء كما تتعامل مع مجموعة الاختبارات.
Lighthouse CI
مجموعة الأدوات مفتوحة المصدر Lighthouse CI (lhci) من Google: تشغّل Lighthouse عدة مرات، وتحسب الوسيط، وتتحقق من القيم مقابل الحدود، ثم ترفع النتائج.
npm install -D @lhci/cli
# Run locally:
npx lhci autorunlighthouserc.json — الإعداد
اضبط عناوين URL المراد اختبارها، وعدد مرات التشغيل، وعمليات التحقق.
// lighthouserc.json
{
"ci": {
"collect": {
"url": [
"http://localhost:3000",
"http://localhost:3000/blog",
"http://localhost:3000/pricing"
],
"numberOfRuns": 5,
"startServerCommand": "npm run start"
},
"assert": {
"assertions": {
"categories:performance": ["error", { "minScore": 0.9 }],
"categories:accessibility": ["error", { "minScore": 0.95 }],
"categories:seo": ["warn", { "minScore": 0.9 }],
"largest-contentful-paint": ["error", { "maxNumericValue": 2500 }],
"total-blocking-time": ["error", { "maxNumericValue": 200 }],
"cumulative-layout-shift": ["error", { "maxNumericValue": 0.1 }]
}
},
"upload": {
"target": "temporary-public-storage"
}
}
}التكامل مع GitHub Action
تشغّل الأداة الرسمية treosh/lighthouse-ci-action lhci مع كل طلب سحب، وتنشر فحص حالة.
# .github/workflows/lighthouse.yml
name: Lighthouse CI
on: [pull_request]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20', cache: 'npm' }
- run: npm ci && npm run build
- uses: treosh/lighthouse-ci-action@v11
with:
configPath: ./lighthouserc.json
uploadArtifacts: true
temporaryPublicStorage: trueالوسيط لعمليات تشغيل متعددة
تختلف درجات Lighthouse بين عمليات التشغيل بسبب ضوضاء التوقيت. تحسب numberOfRuns: 5 الوسيط، وهو مستقر بما يكفي للتحقق مقابله. يؤدي تشغيل الأداة أقل من 3 مرات إلى نتائج متذبذبة.
ميزانيات الأداء
إضافةً إلى الدرجات، ضع ميزانيات صارمة لحجم الموارد وعددها. تفشل عملية البناء إذا جرى تجاوز هذه الميزانيات.
// budget.json
[
{
"resourceSizes": [
{ "resourceType": "script", "budget": 300 },
{ "resourceType": "image", "budget": 100 }
],
"resourceCounts": [
{ "resourceType": "third-party", "budget": 10 }
]
}
]
// lighthouserc.json:
"collect": {
"settings": { "budgetsPath": "./budget.json" }
}خادم Lighthouse CI
استضف خادم LHCI بنفسك للاحتفاظ بالبيانات التاريخية، وعرض مخططات الاتجاهات، ومقارنة الفروع بمرور الوقت. أو استخدم تخزينًا عامًا مؤقتًا لنتائج طلبات السحب لمرة واحدة.
اختبار الصفحات التي تتطلب المصادقة
استخدم نصوص Puppeteer لتسجيل الدخول قبل تشغيل Lighthouse.
// lighthouserc.json
"collect": {
"puppeteerScript": "./lighthouse-login.js",
"url": ["http://localhost:3000/dashboard"]
}
// lighthouse-login.js
module.exports = async (browser, context) => {
const page = await browser.newPage();
await page.goto('http://localhost:3000/login');
await page.fill('#email', 'test@example.com');
await page.fill('#password', 'test123');
await page.click('button[type=submit]');
await page.waitForNavigation();
};إشعارات Slack وDiscord
أرسل نتائج LHCI إلى دردشة فريقك، فتراجعات الأداء تستحق الاهتمام نفسه الذي تحظى به إخفاقات الاختبارات.
الهاتف المحمول مقابل سطح المكتب
تستخدم Lighthouse الهاتف المحمول افتراضيًا (شبكة 4G بطيئة مع وحدة معالجة مركزية متوسطة المستوى). ولتقييم سطح المكتب، اضبط preset: 'desktop'. ينبغي لمعظم تطبيقات الإنتاج اختبار البيئتين، عبر مهمتين منفصلتين في CI.
معايرة الحدود
ابدأ بالدرجات الحالية بوصفها خطوطًا أساسية. لا تُفشل طلبات السحب في اليوم الأول، بل سجّل التحذيرات وأصدرها أولًا. وبعد أن يعتاد فريقك سير العمل، ارفع الحدود تدريجيًا.
ما بعد Lighthouse
تقدّم Lighthouse بيانات مختبرية. اقرنها بمراقبة المستخدمين الفعليين (RUM): تمنحك حزمة web-vitals من npm مع تحليلاتك، أو خدمات مثل SpeedCurve وCalibre، اتجاهات حقيقية للأداء.
تحقّق سريعًا
لماذا تحسب Lighthouse CI عادةً وسيط عدة عمليات تشغيل (مثل 5) بدلًا من عملية تشغيل واحدة؟
مراجعة: Lighthouse الآلية
يتكامل lhci autorun مع CI. اضبطه في lighthouserc.json: عناوين URL، وعمليات التشغيل (5 أو أكثر)، وعمليات التحقق من الفئات والمقاييس، وميزانيات الأداء. استخدم treosh/lighthouse-ci-action مع GitHub. استضف خادم LHCI بنفسك لتتبع الاتجاهات. استخدم نصوص Puppeteer للصفحات التي تتطلب المصادقة. اختبر الهاتف المحمول وسطح المكتب. ابدأ بالتحذيرات، ثم شدّد الحدود بمرور الوقت. واقرن ذلك بـ RUM للحصول على صورة كاملة.
الأسئلة الشائعة
هل درس «فحوصات Lighthouse الآلية» مجاني؟
نعم — نص درس «فحوصات Lighthouse الآلية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Frontend Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Frontend Academy 4 دروس في المجموع.
ماذا ستتعلم في «فحوصات Lighthouse الآلية»؟
أضف GitHub Action الخاص بـ Lighthouse CI، وحدّد حدودًا لدرجات الأداء وإمكانية الوصول، وامنع عمليات الدمج التي تؤدي إلى تراجع Core Web Vitals تتمرن على Frontend Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Frontend Academy؟
لا تُشترط خبرة سابقة. Frontend Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «فحوصات Lighthouse الآلية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Frontend Academy هذا؟
نعم. كل درس في Frontend Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- GitHub Actions للواجهة الأمامية: lint وtest وbuild
- النشر إلى Vercel وNetlify وCloudflare Pages
- متغيرات البيئة في CI
- فحوصات Lighthouse الآلية