GH GambleHub

UI өнімділігін оңтайландыру

1) «Жылдам» деп не санау керек

TTFB (бірінші байтқа дейінгі уақыт) - сервердің/CDN жылдам жауап беруі.
LCP (Largest Contentful Paint) - «басты» контент жылдам пайда болды.
INP (Interaction to Next Paint) - өзара әрекеттесу кезіндегі сезімталдық.
CLS (Cumulative Layout Shift) - интерфейстің «дірілдеуінің» болмауы.
TTI (Time to Interactive) - бәрі жауап бергенде.
Ұсынылатын бағдарлар: LCP ≤ 2. 5 с. INP ≤ 200 мс. CLS ≤ 0. 1 (нақты пайдаланушылардың 75-перцентилі үшін).

2) Процесс: өлшеу → тар жерді табу → бюджетті бекіту

1. Өлшеу: RUM (нақты пайдаланушылар, елдер/желілер/девайстар бойынша перценттелген) + синтетика (Lighthouse/шолғыштар).
2. Табу: Performance кескіндегіші (ұзақ тапсырмалар> 50 мс, layout thrashing, артық рендерлер).
3. Белгілеу: бюджеттер (JS/CSS/қаріптер, LCP/INP салмағы) және CI-дегі «қызыл сызықтар».

3) Желі және ресурстарды жүктеу

3. 1 HTTP және артықшылықтары

HTTP/2/3 қосу, Brotli қысу.
'preconnect' критикалық домендерге; 'dns-prefetch' екінші дәрежелі домендер үшін.
Маңызды ресурстар үшін 'preload' (кейіпкер-сурет, негізгі қаріп).
'fetchpriority =' high/low 'және' priority 'көмегі бар.

3. 2 Кэштеу

Файл хеші бар статика: 'Cache-Control: public, max-age = 31536000, immutable'.
HTML - CDN арқылы қысқа TTL + stale-while-revalidate.
ETag/Last-Modified және Service Worker офлайн/қайта бару үшін.

4) Код: аз, кеш, «тегіс»

4. 1 Құрастыру

Tree-shaking, minify (в т.ч. dead-code-elim).
Бағыттар/виджеттер бойынша Code-splitting, динамикалық импорт.
Негізгі бандлдағы «жаһандық» ауыр пакеттерден аулақ болу (moment → Intl/Day. js).

4. 2 HTML рендерлеу және жеткізу

SSR/ISR/стриминг: каркас және негізгі контент бірінші болып беріледі.
Partial/Islands hydration: тек интерактивті учаскелерді ғана гидрлеу.
Defer барлығы сыни емес: '<script type =' module 'defer>'.

4. 3 Реакт-ерекшелік (егер React пайдалансаңыз)

`React. lazy '+' Suspense 'жалқау виджеттер үшін.
Ауыр сүзгілер/іздеулер үшін 'startTransition' және 'useDeferredValue'.
RSC (Server Components) - серверде есептеу, клиентке JS аз.
Стейттегі селекторлар (zustand/redux): бүкіл сторға емес, бөлшекке қол қою.

5) Рендер және жай-күйі: қайда «тежейді»

5. 1 Ререндерлерді оқшаулау

Үлкен компоненттерді бөлшектеңіз, мемоқамдастырыңыз ('memo', 'useMemo', 'useCallback').
Тізім кілттері - тұрақты; қажетсіз пропрларда жаңа мүмкіндіктер/нысандар жасамаңыз.
Жиі өзгеретін деректер үшін «жаһандық» контекстен аулақ болыңыз - селекторларды немесе оқиға шиналарын пайдаланыңыз.

5. 2 Виртуалдандыру және үлкен тізімдер

Парақтар/кестелер → виртуалдандыру (render window).
Backpressure бар пагинация/инфинит-скролл (100k жолдарын бірден жүктемеңіз).
Вьюпорттан тыс ауыр виджеттерді кейінге қалдыру.

5. 3 Layout & paint

content-visibility: auto; жасырын секциялар үшін (шолғыш көрінбейтін бөліктерді рендетпейді).
contain және 'contain-intrinsic-size' болжамды өлшемдер үшін.
Жиі оқудан аулақ болыңыз. өлшемдерді топтастырыңыз.
will-change дозаланған (әйтпесе артық жады/қабаттар).

6) Суреттер мен графика

Пішімдер: AVIF/WebP (PNG/JPEG бойынша fallback).
Responsive-тәсіл: 'srcset' + 'sizes', retina үшін density-based.
'loading =' lazy 'батырлық емес суреттер үшін; priority/preload - тек LCP-кандидат үшін.
Бекітілген өлшемді плейсхолдерлер → CLS секірулері жоқ.
Канвас/чарталар: offscreen-канвас және есеп айырысу үшін Web Worker; қайта суреттердің батчингі.

7) Қаріптер мен мәтін

Бірнеше сызбаның орнына бір-екі variable font.
'font-display: swap '/' optional', preload негізгі сызу үшін.
Қаріпті ауыстырған кезде «секіруді» азайту үшін 'size-adjust'.
Ұқсас өлшемдері бар жергілікті fallback қаріптері.

8) CSS және анимациялар

Сыни CSS инлайн (<14-20 кБ), қалғаны - кейінге қалдыру.
Пайдаланылмайтын мәнерлерді жою (Purge/CSSTree).
Мүмкіндігінше transform/opacity анимациялары; 'prefers-reduced-motion'.
Терең каскадтардан және жарылғыш селекторлардан аулақ болу керек.

9) Web Workers, ағыны және ауыр міндеттер

Барлық CPU-ауыр - Worker (парсинг, сұрыптау, агрегаттау, ML).
Ұзақ жауаптар үшін стримингтік API ('ReadableStream', 'fetch' ағындарымен).
Сезімталдықты сақтау үшін 'requestIdleCallback '/микротаскалар арқылы тапсырмалар бөлшектеу.

10) Орналасу тұрақтылығы (CLS)

LCP элементі үшін орынды сақтаңыз (сурет/виджет).
Баннерлерді/ленталарды белгіленген өлшемдерсіз қоюға болмайды.
Асимметриялық тултиптер/тосттар - контентті жылжытпау; қабаттарды/порталдарды пайдалану.

11) Сниппеттердің үлгілері

Сыни қаріп және LCP кескіні

html
<link rel="preload" href="/fonts/Inter. var. woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" as="image" href="/hero. avif" imagesrcset="/hero. avif 1x, /hero@2x. avif 2x" fetchpriority="high">

Жалқау және қауіпсіз инициализация виджет

js const Widget = React. lazy(() => import('./Widget'));
function Section() {
const inView = useInViewport('#sec');
return <div id="sec">{inView? <React. Suspense fallback={null}><Widget/></React. Suspense>: null}</div>;
}

Орналасуды тұрақтандыру

css
.hero {
content-visibility: auto;
contain: layout paint;
contain-intrinsic-size: 720px 320px ;/LCP reserve/
}

12) Регрессияларды бақылау және бюджеттер

Bundle-budget: жалпы JS ≤ N кБ, CSS ≤ M кБ, initial-chunk ≤ K кБ.
Web-Vitals в CI (эмульгирленген) + RUM-алерталар (перцентилдермен).
Бандлды талдау: PR-да source-map-explorer/анализатор.
Компоненттердің перформанс-бенчмарктері (элемент рендері 10k, реакция уақыты).

13) Қарсы үлгілер

«Бәрін бірден»: графиктерді, редакторларды, карталарды бірінші экранда жүктеу.
Үлкен жаһандық стейт → каскадтық ререндэрлер.
Суреттер қажетті өлшемнен 2-4 ×, 'srcset/sizes' жоқ.
Басты ағындағы ұзақ синхронды циклдар.
Оңтайландырусыз 'outline: none' және кастомдық фокустар рендер индикаторларына кедергі келтіреді.
'top/left' анимациясы (орналасуды бұзады және reflow шақырады).

14) Экранның чек-парағы

  • LCP ≤ 2. 3G/мобайл трафигінде 5 с CLS ≤ 0. 1. INP ≤ 200 мс
  • Сыни ресурстар: preload/басымдықтар; қалғаны - defer/lazy
  • Бандалар: code-split, артық тәуелділік жоқ
  • Тізімдерді/кестелерді виртуалдандыру, ауыр виджеттерді кейінге қалдыру
  • Суреттер: AVIF/WebP, 'srcset/sizes', 'loading =' lazy ''
  • Қаріптер: variable + 'font-display', preload тек қажетті
  • CSS: критикалық инлайн, Purge, 'content-visibility' және 'contain' орынды жерде
  • Ауыр есептеулер үшін Workers/idle
  • Бюджеттер мен Web-Vitals дашбордтарға/алерталарға қосылған

15) Енгізу жоспары (3 итерация)

Итерация 1 - Жылдам жеңістер (1-2 апта)

Brotli/HTTP-2/3, CDN қосу. Сыни CSS және preload LCP ресурстары.
Динамикалық импортқа ауыр виджеттерді шығару.
Суреттер → AVIF/WebP + 'srcset'. Қаріптер: 'font-display: swap'.

Итерация 2 - Құрылымдық жақсартулар (3-4 апта)

Бағыттар бойынша Code-split, бандлды талдау, «ауыр» либаларды жою.
Тізімдерді виртуалдандыру, visibility, contain-intrinsic-size.
SSR/стриминг/аралдарды енгізу (мұнда релевантты).
Web-Vitals-пен RUM, CI-дегі бюджеттер.

Итерация 3 - Масштабы және тұрақтылығы (үздіксіз)

Workers/offscreen-канвас, есеп айырысу батчингі, startTransition/deferredValue.
Тұрақты перф-аудит, регрессия автодайджесті, команданы оқыту.

16) Шағын FAQ

Мобайлдағы ең көп жылдамдататын нәрсе не?
Бастапқы JS, SSR/стримингті азайту және LCP бейнесін оңтайландыру.

Әрқашан SSR қажет пе?
Жоқ. Егер бет динамикалық интерактивті және нашар кэш болса - islands/partial hydration жақсы болуы мүмкін.

Неліктен INP «жеңіл» бандлда жаман?
Мүмкін, басты ағындағы ұзақ тапсырмалар (сұрыптау, графиктер) - Worker бағдарламасына шығарыңыз және тапсырмаларды бөлшектеңіз.

Жиынтығы

Жылдам UI - бұл пәндердің жиынтығы: желілік басымдықтар мен кэш, кіші және кеш бандла, секіріссіз болжамды рендер, үнемді суреттер мен қаріптер, сондай-ақ нақты әлемдегі метриканы тұрақты бақылау. Бюджеттерді енгізіңіз, тексерулерді автоматтандырыңыз және команданы жылдамдықты әр қадамда ойлауға үйретіңіз - осылайша интерфейс бүгін және бір жылдан кейін жылдам болады.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Telegram
@Gamble_GC
Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.