การตรวจสอบ Lighthouse อัตโนมัติ
เพิ่ม GitHub Action ของ Lighthouse CI ตั้งค่าเกณฑ์คะแนนประสิทธิภาพและการเข้าถึง และบล็อกการผสานโค้ดที่ทำให้ Core Web Vitals แย่ลง
การตรวจสอบ Lighthouse อัตโนมัติ เป็นบทเรียน Frontend Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Frontend Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน
ทำไมต้องทำ Lighthouse โดยอัตโนมัติ
การเรียกใช้ Lighthouse ด้วยตนเองตรวจพบประสิทธิภาพถดถอยได้ล่าช้า ซึ่งโดยมากจะเกิดหลังจากผู้ใช้จริงร้องเรียนแล้ว Lighthouse CI แบบอัตโนมัติจะทำงานในทุก PR ทำให้กระบวนการสร้างล้มเหลวเมื่อเมตริกสำคัญถดถอย และติดตามแนวโน้มคะแนนในระยะยาว ควรดูแลประสิทธิภาพเช่นเดียวกับชุดทดสอบ
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 ในทุก PR และโพสต์การตรวจสอบสถานะ
# .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 เองเพื่อเก็บข้อมูลย้อนหลัง ดูกราฟแนวโน้ม และเปรียบเทียบสาขาในระยะยาว หรือใช้พื้นที่จัดเก็บสาธารณะชั่วคราวสำหรับผลลัพธ์ PR แบบครั้งเดียว
การทดสอบหน้าที่ต้องยืนยันตัวตน
ใช้สคริปต์ 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 ที่ช้าและ CPU ระดับกลาง) สำหรับเดสก์ท็อป ให้ตั้งค่า preset: 'desktop' แอปที่ใช้งานจริงส่วนใหญ่ควรตรวจสอบทั้งสองแบบ โดยแยกเป็นคนละงานใน CI
การปรับค่าขีดจำกัด
เริ่มจากใช้คะแนนปัจจุบันเป็นค่าพื้นฐาน อย่าเพิ่งทำให้ PR ล้มเหลวตั้งแต่วันแรก ให้บันทึกและแจ้งเตือนก่อน เมื่อทีมคุ้นเคยกับเวิร์กโฟลว์แล้ว จึงค่อยเพิ่มความเข้มงวดของค่าขีดจำกัด
นอกเหนือจาก Lighthouse
Lighthouse ให้ข้อมูลจากห้องทดลอง ควรใช้ร่วมกับการตรวจติดตามผู้ใช้จริง (RUM) โดยแพ็กเกจ npm ชื่อ web-vitals ร่วมกับระบบวิเคราะห์ข้อมูลของคุณ หรือบริการอย่าง SpeedCurve และ Calibre จะช่วยแสดงแนวโน้มประสิทธิภาพจากการใช้งานจริง
ตรวจสอบอย่างรวดเร็ว
เหตุใด Lighthouse CI จึงมักใช้ค่ามัธยฐานจากการเรียกใช้หลายครั้ง (เช่น 5 ครั้ง) แทนการเรียกใช้เพียงครั้งเดียว
สรุป: Lighthouse แบบอัตโนมัติ
lhci autorun ผสานรวมกับ CI กำหนดค่าใน lighthouserc.json ได้แก่ URL, จำนวนครั้งที่เรียกใช้ (5 ครั้งขึ้นไป), การตรวจยืนยันหมวดหมู่และเมตริก และงบประมาณประสิทธิภาพ ใช้ treosh/lighthouse-ci-action สำหรับ GitHub โฮสต์เซิร์ฟเวอร์ LHCI เองเพื่อดูแนวโน้ม ใช้สคริปต์ Puppeteer สำหรับหน้าที่ต้องยืนยันตัวตน ตรวจสอบทั้งอุปกรณ์เคลื่อนที่และเดสก์ท็อป เริ่มจากการแจ้งเตือน แล้วค่อยเพิ่มความเข้มงวดของค่าขีดจำกัด ใช้ร่วมกับ RUM เพื่อให้เห็นภาพครบถ้วน
คำถามที่พบบ่อย
บทเรียน “การตรวจสอบ Lighthouse อัตโนมัติ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การตรวจสอบ Lighthouse อัตโนมัติ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Frontend Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การตรวจสอบ Lighthouse อัตโนมัติ”
เพิ่ม GitHub Action ของ Lighthouse CI ตั้งค่าเกณฑ์คะแนนประสิทธิภาพและการเข้าถึง และบล็อกการผสานโค้ดที่ทำให้ Core Web Vitals แย่ลง คุณปฏิบัติ Frontend Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Frontend Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Frontend Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การตรวจสอบ Lighthouse อัตโนมัติ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Frontend Academy นี้ได้ไหม
ได้ บทเรียน Frontend Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- GitHub Actions สำหรับฟรอนต์เอนด์: ตรวจรูปแบบ ทดสอบ และบิลด์
- การนำไปใช้งานบน Vercel, Netlify และ Cloudflare Pages
- ตัวแปรสภาพแวดล้อมใน CI
- การตรวจสอบ Lighthouse อัตโนมัติ