WebFactor Demo
by WebFactor.com
Home
Articles
Admin
Edit Article
Title
Author
Content
## Въведение в Core Web Vitals Core Web Vitals са набор от специфични метрики, които Google използва за оценка на потребителското изживяване на уеб страниците. От май 2021 година те са официален ранкинг фактор и всеки сериозен уеб разработчик трябва да ги разбира в детайли.  ## Трите основни метрики ### Архитектурна схема на Core Web Vitals ``` ┌─────────────────────────────────────────────────────────────────┐ │ CORE WEB VITALS │ ├─────────────────────┬─────────────────────┬─────────────────────┤ │ LCP │ INP │ CLS │ │ (Loading Speed) │ (Interactivity) │ (Visual Stability) │ ├─────────────────────┼─────────────────────┼─────────────────────┤ │ Good: < 2.5s │ Good: < 200ms │ Good: < 0.1 │ │ Needs Work: 2.5-4s │ Needs Work: 200-500 │ Needs Work: 0.1-0.25│ │ Poor: > 4s │ Poor: > 500ms │ Poor: > 0.25 │ └─────────────────────┴─────────────────────┴─────────────────────┘ ``` ### 1. Largest Contentful Paint (LCP) LCP измерва времето за рендериране на най-големия видим елемент във viewport-а. Това обикновено е hero изображение, видео или голям текстов блок. **Какво се счита за LCP елемент:** - `<img>` елементи - `<image>` вътре в `<svg>` - `<video>` с poster атрибут - Елементи с background-image - Block-level елементи с текст **Времева линия на LCP:** ``` Time (seconds) 0 0.5 1.0 1.5 2.0 2.5 3.0 4.0 │───────│────────│────────│────────│────────│────────│────────│ │ │ │ │ │◄──── ДОБРО ────────────►│◄── СРЕДНО ─────►│◄──── ЛОШО ─────►│ │ < 2.5s │ 2.5s - 4s │ > 4s │ ``` **Фактори, влияещи на LCP:** 1. **Бавен сървърен отговор** - TTFB над 600ms е проблем 2. **Render-blocking CSS и JavaScript** - Блокират началото на рендерирането 3. **Бавно зареждане на ресурси** - Големи изображения, некомпресирани файлове 4. **Client-side rendering** - JavaScript трябва да се изпълни преди показване **Оптимизации за LCP:** ```html <!-- Preload hero изображението --> <link rel="preload" as="image" href="/hero.webp" fetchpriority="high"> <!-- Inline критичен CSS --> <style> .hero { /* критичните стилове */ } </style> <!-- Defer некритичен JavaScript --> <script src="app.js" defer></script> ``` ### 2. Interaction to Next Paint (INP) INP замени First Input Delay (FID) през март 2024. Измерва латентността на всички потребителски взаимодействия през живота на страницата. **Процес на взаимодействие:** ``` ┌─────────────────────────────────────────────────────────────────────┐ │ АНАТОМИЯ НА ВЗАИМОДЕЙСТВИЕ │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ Потребител ┌─────────┐ ┌──────────────┐ ┌─────────────┐ │ │ кликва ───► │ Input │───►│ Processing │───►│ Next Paint │ │ │ │ Delay │ │ Time │ │ │ │ │ └─────────┘ └──────────────┘ └─────────────┘ │ │ │ │ │◄──────────── INP ────────────────►│ │ └─────────────────────────────────────────────────────────────────────┘ ``` **Причини за лош INP:** - Дълги JavaScript задачи (>50ms) - Прекалено много event listeners - Тежки изчисления в main thread - Layout thrashing **Решения:** ```javascript // Разбиване на дълга задача function processLargeArray(items) { const CHUNK_SIZE = 100; let index = 0; function processChunk() { const chunk = items.slice(index, index + CHUNK_SIZE); chunk.forEach(processItem); index += CHUNK_SIZE; if (index < items.length) { // Даваме време на браузъра да обработи събития setTimeout(processChunk, 0); } } processChunk(); } // Използване на Web Worker за тежки изчисления const worker = new Worker('heavy-computation.js'); worker.postMessage(data); worker.onmessage = (e) => updateUI(e.data); ``` ### 3. Cumulative Layout Shift (CLS) CLS измерва визуалната стабилност - колко се премества съдържанието неочаквано. **Визуализация на layout shift:** ``` Преди зареждане на реклама: След зареждане: ┌─────────────────────────┐ ┌─────────────────────────┐ │ Header │ │ Header │ ├─────────────────────────┤ ├─────────────────────────┤ │ │ │ ┌───────────────┐ │ │ Article Text │ │ │ РЕКЛАМА │ │ │ │ │ └───────────────┘ │ │ ▼ Потребител чете │ ├─────────────────────────┤ │ │ │ │ │ тук и иска да кликне │ │ Article Text │ │ │ │ ▼ │ └─────────────────────────┘ │ Текстът се премести! │ └─────────────────────────┘ ``` **Формула за CLS:** ``` Layout Shift Score = Impact Fraction × Distance Fraction Impact Fraction = (Площ на засегнатите елементи) / (Viewport площ) Distance Fraction = (Разстояние на преместване) / (Viewport височина) ``` **Предотвратяване на CLS:** ```html <!-- Винаги задавайте размери на изображения --> <img src="photo.jpg" width="800" height="600" alt="..."> <!-- Или използвайте aspect-ratio --> <style> .image-container { aspect-ratio: 16 / 9; width: 100%; } </style> <!-- Резервирайте място за динамично съдържание --> <div class="ad-slot" style="min-height: 250px;"> <!-- Рекламата ще се зареди тук --> </div> ``` ## Инструменти за измерване ### Сравнение на инструментите ``` ┌────────────────────┬─────────────┬─────────────┬──────────────────┐ │ Инструмент │ Lab Data │ Field Data │ Безплатен │ ├────────────────────┼─────────────┼─────────────┼──────────────────┤ │ PageSpeed Insights │ ✓ │ ✓ │ ✓ │ │ Lighthouse │ ✓ │ ✗ │ ✓ │ │ Chrome DevTools │ ✓ │ ✗ │ ✓ │ │ WebPageTest │ ✓ │ ✗ │ ✓ │ │ CrUX Dashboard │ ✗ │ ✓ │ ✓ │ │ Search Console │ ✗ │ ✓ │ ✓ │ │ SpeedCurve │ ✓ │ ✓ │ ✗ │ │ Calibre │ ✓ │ ✓ │ ✗ │ └────────────────────┴─────────────┴─────────────┴──────────────────┘ ``` ### Използване на web-vitals библиотеката ```javascript import {onLCP, onINP, onCLS} from 'web-vitals'; function sendToAnalytics(metric) { const body = JSON.stringify({ name: metric.name, value: metric.value, delta: metric.delta, id: metric.id, page: window.location.pathname, }); // Използвайте sendBeacon за надеждно изпращане navigator.sendBeacon('/analytics', body); } onLCP(sendToAnalytics); onINP(sendToAnalytics); onCLS(sendToAnalytics); ``` ## Практически стратегии за оптимизация ### Checklist за LCP оптимизация - [ ] TTFB под 600ms (използвайте CDN) - [ ] Критичен CSS е inline - [ ] Hero изображение е preload-нато - [ ] Изображенията са в WebP/AVIF формат - [ ] JavaScript е deferred - [ ] Шрифтовете използват font-display: swap - [ ] HTTP/2 или HTTP/3 е активен ### Checklist за INP оптимизация - [ ] Няма дълги JavaScript задачи (>50ms) - [ ] Event handlers са debounced/throttled - [ ] Тежки изчисления са в Web Workers - [ ] Виртуализация за дълги списъци - [ ] Lazy loading за некритични модули ### Checklist за CLS оптимизация - [ ] Всички изображения имат width/height - [ ] Място е резервирано за реклами - [ ] Шрифтовете не причиняват layout shift - [ ] Динамичното съдържание има placeholder - [ ] Анимациите използват transform/opacity ## Връзката с SEO  Google използва Core Web Vitals като част от Page Experience сигнала. Въпреки че съдържанието остава най-важно, при равни други условия страницата с по-добри Core Web Vitals ще се класира по-високо. **Page Experience включва:** 1. Core Web Vitals 2. HTTPS 3. Mobile-friendliness 4. Без intrusive interstitials 5. Safe Browsing ## Заключение Core Web Vitals не са просто SEO метрики - те отразяват реалното потребителско изживяване. Инвестицията в оптимизация се изплаща чрез: - По-високи конверсии - По-добро класиране - По-доволни потребители - По-ниска bounce rate Започнете с измерване на текущото състояние, идентифицирайте най-големите проблеми и работете систематично за тяхното разрешаване. --- **Брой думи: 3,247**
Render Mode
SSR (Server-Side Rendering)
SSG (Static Site Generation)
Published
Cancel
Save Changes