HTML5 оюндарынын кроссбраузер шайкештиги: тест-матрица
1) Эмне үчүн HTML5 оюндары "оору" кроссбраузерлик
Оюндар платформанын дээрлик бардык катмарларына таасир этет: графика (Canvas/WebGL/WebGPU), таймерлер жана агымдар (RAF/Workers), үн (WebAudio/Media policies), киргизүү (keyboard/pointer/touch/gamepad), тармак жана кэши (SW/Cache/IndexedDB), интеграция (fullscreen/orientation/PWA). Ар кандай кыймылдаткычтар - Chromium (Chrome/Edge/Opera/Android), WebKit (Safari/macOS, iOS/iPadOS бардык браузерлерде), Gecko (Firefox). Plus энергияны үнөмдөө айырмачылыктар, арткы өтмөктөрдү throttling, эстутум чеги жана autoplay саясаты.
2) Колдоого алынган чөйрөлөр: максаттуу матрица
Браузерлер/OS (минималдуу нускалары - мисал, сиздин SLA алмаштыруу):- Desktop: Chrome/Edge 116+, Firefox 115+, Safari 16+ (macOS 12+).
- Mobile: Chrome Android 116+ (Android 9+), Samsung Internet 21+, Safari iOS/iPadOS 16+.
- WebView: Android WebView 116 +, iOS - бир гана WebKit (iOS бардык браузерлер WebKit колдонот).
- PWA (орнотуу): Chromium desktop/мобилдик, Safari iOS 16. 4 + (чектөөлөрү менен Home Screen үчүн Add).
- Төмөн (мобилдик бюджеттик, 2 ГБ RAM)
- Орто (мобилдик/ультрабуктар, 4-8 ГБ RAM)
- Жогорку (Desktop/Консумердик GPU, 8-16 + ГБ)
3) Big Test Matrix (үлгү)
Трекериңизде реалдуу таблицаны түзүңүз. Төмөндө - негизги блоктор жана статустар (OK/Partial/N/A) өлчөө керек.
3. 1 Графика
3. 2 Аудио жана медиа саясаты
3. 3 Киргизүү жана интерфейс
3. 4 Аткаруу жана энергия үнөмдөө
3. 5 сактоо/оффлайн/тармак
4) Кол скрипттердин минималдуу топтому (Smoke)
1. Биринчи учуруу: assets жүктөө, splash, <3 орто класста башталышы.
2. Киргизүү: TACH/чычкан/Клава/Gamepad, бир нече манжалар, кармоо, Swipes.
3. Экран: толук экран, багыт бөгөттөө, safe-area (iPhone).
4. Аудио: колдонуучу ишаратынан кийин биринчи нота, mute/unmute, музыка аралашмасы/FX.
5. WebGL: контекст жоготуу/калыбына келтирүү (симуляция), көлөкө/shaders/масштаб.
6. Жашоо айлампасы: буруш/жайылтуу, чакыруу/эскертүү, алкагында өтмөк.
7. Сактоо: IndexedDB/LocalStorage прогресс/орнотуу ,/offline кийин калыбына келтирүү.
8. Тармак: 3G throttle/жогорку RTT, тармак жоготуу, retrais, SW аркылуу кэш.
9. PWA: орнотуу (Chromium/IOS), сөлөкөттөр, offline-бет, нускасын жаңыртуу.
10. Узак сессия: 20-30 мүнөт агып жок (FPS/heap туруктуу).
5) Automation: кантип жана кантип
Playwright (сунушталат): cross кыймылдаткыч, мобилдик эмуляциялар, WebKit айдоочу, Video/соода.
Cypress: тез айлампасы, бирок WebKit/Mobile - чектелген.
WebDriver/Selenium: булуттар менен бириктирүү.
булуттар: BrowserStack, Sauce Labs - реалдуу түзмөктөр жана IOS Safari.
Профилдөө: Chrome DevTools Protocol, Safari Web Inspector (Remote), Firefox Profiler.
Перф скрипттер: k6/browser үчүн RUM окшош скрипттерди жүктөө assets.
Кеңеш: ар бир PR үчүн автотесттердин "пакетин" 3-5 мүнөткө (smoke) сактаңыз: жүктөп алуу, бир оюн айлампасы, тыныгуу, багыт которуу, сактоону текшерүү.
6) аткаруу: максаттуу метрика жана телеметрия
FPS: туруктуу 60 fps (же ProMotion боюнча 120) - бир гана орто эмес, frame pacing чечүү.
Frame budget: 16. 7 мс (же 8. 3 ms) update + render, GC <2-3 ms кадрда.
Input latency: <80 мс мобайл, 50 мс десктоп.
Time-to-First-Frame (TTFF): < 1. 5 с (жүктөлгөндөн кийин).
Heap өсүшү: 20 мүнөт сессиясында + 10% ашык эмес; runaway allocations жок.
Аудио latency: <100 ms roundtrip.
RUM орнотуу: телеметрия FPS жөнөтүү, TTFF, heap, WebGL context lost, ката rendering 'browser/os/device'.
7) Тез-тез туура эмес жана кантип дарылоо керек
7. 1 Графика/рендер
HiDPI Canvas: логикалык өлчөмү = CSS px, физикалык = 'css devicePixelRatio'.
WebGL контекст жоготуу: угуу 'webglcontextlost/webglcontextrestored', кайра жүктөө үчүн ресурстарды сактоо.
Текстура/shaders: Universary кеңейтүү качуу; текшерүү 'OES _ texture _ float', 'EXT _ color _ buffer _ float' жана fallback.
WebGPU: тоголотуп feature-flag; fallback катары WebGL2 жол.
7. 2 Аудио/Autoplay
AudioContext колдонуучу ишараты ('tap/click') боюнча ишке киргизип, "уруксат берилген" желегин сактаңыз.
iOS боюнча, бурулганда/которулганда suspend даяр.
7. 3 Киргизүү/ишараттар
Иш-чара угуучулар демейки passive жасайт; кайда 'preventDefault ()' - ачык passive өчүрүү.
Pointer Events + Touch Events - кош иштетүү качуу; кириш катмарын абстракттуу.
Gamepad: 'navigator текшерүү. getGamepads () 'RAF боюнча, баскычтарды эске алуу.
7. 4 Fullscreen/Orientation/Safe-Area
IOS үчүн 'env (safe-area-inset-)' эске алып, Canvas/Overlay UI үчүн padding кошуу.
Orientation lock user gesture кийин гана; "экранды буруу" баскычы бар.
7. 5 Окуялар/оффлайн
IndexedDB: тайм-аутка/ретрага айлантуу; iOS квоталары кичинекей - жеңил сактоо.
Service Worker: стратегиясы 'Stale-While-Revalidate' assets үчүн; чынчылдык менен майып чыгаруу (мазмун-hash).
LocalStorage жеке режимдерде жеткиликтүү эмес болушу мүмкүн - эскертүү менен эс бузулушу.
7. 6 Убакыт/фон
Анын фонунда таймерлер 1 с же андан көп. Оор логиканы токтотуп, оюнду токтотуңуз.
page visibility/' visibilitychange 'жана интервалдардын ордуна event-driven жаңыртууларды киргизиңиз.
8) Pipeline Crossbrauser үчүн чогултуу
Транспиляция: TypeScript/Babel максаттары 'es2020' (же эски WebViews үчүн төмөндө).
Полифилла: UA эмес, fich (feature detection) детекторунун гана.
Assets: спрайт барактар, fallback форматтары менен текстуралар (WebP/PNG), аудио (AAC/OGG/Opus).
Кодду бөлүү: редактор/оюн эмес панелдер үчүн lazy-chunks.
Кысуу: Brotli/Zstd; HTTP/2/3; CDN immutable версиясы менен.
Feature flags: WebGPU/OffscreenCanvas/Threads - ак тизмеге киргизүү.
9) Чек баракчаларынын үлгүлөрү
9. 1 ташкил (Android/Chrome, iPhone/Safari)
- Touch + multi-touch; жаңсоолор баракты "тартпайт"
- Fullscreen жана багыт; safe-area туура
- Таптан кийин биринчи үн; mute иштейт
- FPS ≥ 50 (төмөн класс), "жыртык" кадр жок
- Сактоо/кайра кийин прогрессти калыбына келтирүү
- Оффлайн сахна/SW кайра иштетүү
- Чакыруу системасы overley (кириш чалуу) → туура тыныгуу
9. 2 Desktop (Windows/macOS)
- Чычкан + дөңгөлөк + клавиатура, IME
- Геймпад (XInput/Generic)
- 60/120Hz мониторинг: туруктуу frame pacing
- Alt-Tab/бир нече монитор/fullscreen/windowed
- эс <чеги, агып жок (20 + мүнөт)
10) Коддун үлгүлөрү (фрагменттер)
Canvas с HiDPI:js function resizeCanvas(canvas) {
const dpr = Math. min(window. devicePixelRatio          1, 2);
const { clientWidth:w, clientHeight:h } = canvas;
canvas. width = Math. floor(w dpr);
canvas. height = Math. floor(h dpr);
const ctx = canvas. getContext('2d');
ctx. setTransform(dpr, 0, 0, dpr, 0, 0);
}js const gl = canvas. getContext('webgl', { preserveDrawingBuffer:false });
canvas. addEventListener('webglcontextlost', e => { e. preventDefault(); paused = true; });
canvas. addEventListener('webglcontextrestored', () => { reloadResources(); paused = false; });js let audioUnlocked = false;
window. addEventListener('pointerdown', () => {
if (!audioUnlocked) {
const ctx = new AudioContext();
const b = ctx. createBuffer(1, 1, 22050);
const s = ctx. createBufferSource();
s. buffer = b; s. connect(ctx. destination); s. start(0);
audioUnlocked = true;
}
}, { once:true, passive:true });js document. addEventListener('visibilitychange', () => {
if (document. hidden) pauseGame();
else resumeGame();
});11) Тобокелдиктерди башкаруу жана артыкчылык берүү
IOS үчүн Мёрфи мыйзамы: Сиздин матрицадан ар бир кичинекей iOS версиясын сынап көрүңүз - регрессия тез-тез болот.
WebView OEM: Эскирген WebView менен Android түзмөктөр - тобокелдиктердин өзүнчө катмар (түзмөктөрдүн "greylist" киргизүү).
Функционалдык желектер: бренддер/пилоттук рыноктор боюнча көйгөйлүү ийгиликтерди киргизүү.
Rollout: 1% → 10% → 50% → 100% RUM дарбазалары менен (FPS, crash, TTFF).
12) Байкоо жана мүчүлүштүктөр
Ар бир мүчүлүштүк отчетуна төмөнкүлөрдү киргизиңиз: 'ua', 'browser version', 'os', 'device', 'gpu/renderer', 'memory', 'fps', 'logs (WebGL/WebAudio каталары)', 'steps', 'repro video'.
Automatic crash dumps (JS/ресурстар каталар), окуялар 'context lost', 'audio unlock failed'.
Dashbord: браузерлер/түзмөктөр боюнча FPS, орточо TTFF, context lost үлүшү, IndexedDB каталары, SW оффлайн хиттери.
13) Акыркы матрица үлгүсү (CSV-балык)
Platform,Browser,Version,Feature,Scenario,Expected,Status,Notes
Android,Chrome,116+,WebGL2,Context lost/restore,State restored,OK, iOS,Safari,16. 6,Audio,First sound on tap,Plays,PARTIAL,Silent switch affects
Desktop,Firefox,115+,Fullscreen,Enter/Exit,No layout jump,OK, Android,WebView,116+,Storage,IndexedDB quota,Save 5MB,PARTIAL,Quota lower on device X iOS,Safari,16. 4+,PWA,Install & relaunch,State persisted,OK, ```
---
14) Өндүрүш даярдыгынын чек-тизмеси
[] Браузерлер/версиялар/түзмөктөр жана SLA жаңыртуу матрицасы жазылган.
[] Автотесттердин Smoke топтому (Playwright) PR жана nightly боюнча башталат; Video/Trace отчеттор.
[] RUM-Telemetry FPS/TTFF/heap/WebGL-browser/түзмөктөр боюнча кесип каталар.
[] Fallback: WebGL1 ← WebGL2 ← WebGPU; Audio unlock; Pointer/Touch абстракция.
[] Иштелип lifecycle/visibility, пауза/resume, offline, context lost.
[] туруктуу сактоо (IndexedDB + деградация), SW/CDN аркылуу immutable assets версия.
[] реалдуу түзмөктөр боюнча Profiles (IOS/Android) жана 60/120 Hz иш столдору.
[] Белгилүү чектөөлөрдү документтештирүү (iOS Autoplay, IDB квота, orientation).
[] Көйгөйлүү көрүнүштөр үчүн кайра/feature-flags пландары (WebGPU/Threads).
[] Оюнда пикир каналы (feedback + log-dampe).
---
Резюме
HTML5 оюндарынын кроссбраузер шайкештиги - бул "Safari иштейт" деген бир чек куту эмес, ал эми тартип: катуу платформа матрицасы, өлчөнүүчү метриктер (FPS/TTFF/heap), чыныгы түзмөктөрдөгү автотесттер, графика/аудио/киргизүү жана кылдат оффлайн жана сактоо менен иштөө. Туруктуу Pipline тестирлөө киргизип, RUM чогултуп, желектердин артында чыпкаларды кармап туруңуз - ошентип, оюн Chrome, Safari жана Firefox, телефон жана десктопто бирдей жылмакай жана алдын ала айтууга болот.