HTML5 խաղերի քրոսբրաուզերի համատեղելիությունը 'թեստ-մատրիցա
1) Ինչո՞ ւ է HTML5 խաղերը «ցավում» քրոսբրաուզերությունը
Խաղերը ազդում են պլատֆորմի գրեթե բոլոր շերտերի վրա 'գրաֆիկա (Canvas/WinGL/WinGPU), (RAF/Workers), ձայն (Windows Audio/Media policies), (keyboard/pointer/touch/gamepad/gamepad/gepad), ցանց), ցանց և kescad) (SW/Cache/IndexeddDB), ինտեգրումը (fullscreen/orientation/PWA)։ Շարժիչների բազմազանությունը Chromics (Chrome/Edge/Opera/Android), No Kit (Safari/no OS, iOS/iPadOS բոլոր զննարկիչներում), Gecko (Firefect)։ Բացի այդ, էներգախնայողության տարբերությունները, ֆոնային ներդրումները, հիշողության և ավտոպլեյի քաղաքականության սահմանները։
2) Աջակցվող միջավայրերը 'նպատակային մատրիցա
Զննարկիչները/ՕՀ (նվազագույն տարբերակները օրինակ են, տեղադրեք ձեր SLA)
Desktop: Chrome/Edge 116+, Firefox 115+, Safari 16+ (macOS 12+).
Mobile: Chrome Android 116+ (Android 9+), Samsung Internet 21+, Safari iOS/iPadOS 16+.
Donald Live: Android Directions +, iOS-ը միայն No Kit-ն է (բոլոր iOS զննարկիչները օգտագործում են SysteKit)։
PWA (տեղադրում): Chromant desktop/mobile, Safari iOS 16։ 4 + (Add to Home Screen սահմանափակումներով)։
Ապարատային դասարաններ
Ցածր (բջջային շարժիչներ, 2 GB RAM)
Միջին (բջջային/ուլտրաբուկներ, 4-8 GB RAM)
Բարձր (desktop/հյուպատոսական GPU, 8-16 + GB)
3) Մեծ թեստ-մատրիցա (ձևանմուշ)
Ձևացրեք իրական աղյուսակը իր թրքերում։ Ներքևում հիմնական բլոկներն ու կարգավիճակները (OK/Partial/N/A), որոնք պետք է չափվեն։
3. 1 Գրաֆիկա
3. 2 Աուդիո և մեդիա քաղաքականություն
3. 3 Մուտքագրում և ինտերֆեյս
3. 4 Արտադրողականություն և էներգախնայողություն
3. 5 Պահպանեք/օֆլայն/ցանց
4) Նվազագույն ձեռքի փաթեթը (Smoke)
1. Առաջին գործարկումը 'ասպետների բեռնումը, splash, մակարդակի սկիզբը <3 միջին դասարանում։
2. Մուտքագրումը 'tach/մկնիկ/կլավա/gampad, բազմաթիվ մատներ, պահումներ, սվայպեր։
3. Էկրանը 'ամբողջական էկրան, կողմնորոշման արգելափակում, safe-area (iPhone հետ)։
4. Աուդիո 'առաջին նոտան ժեստից, mult/unm.ru, երաժշտության խառնուրդ/FX-ից հետո։
5. WinGL 'ենթատեքստի կորուստ/վերականգնում (սիմուլյացիա), ստվեր/շեյդերներ/մասշտաբներ։
6. Կյանքի ցիկլը 'անջատել/շրջել, զանգահարել/ծանուցում, ներդիր ֆոնի վրա։
7. Պահպանումը 'առաջընթաց/2019 IndexeddDB/MedalStorage, վերականգնումը վերագործարկումից/օֆլայնից հետո։
8. Ցանցը ՝ 3G throttle/բարձր RTT, ցանցի կորուստ, retray, SW-ի միջոցով։
9. PWA: Տեղադրումը (Chromance/iOS), iconks, intel-էջ, տարբերակի նորարարություն։
10. Երկար նստաշրջան '20-30 րոպե առանց արտահոսքի (FPS/heap կայուն)։
5) Ավտոմատիզացիա 'ի՞ նչ և ինչպե՞ ս։
Playwright (խորհուրդ է) 'խաչաձև շարժիչ, բջջային էմոցիաներ, Live Kit-վարորդ, տեսահոլովակներ/թրեյսներ։- Cypress: արագ dev ցիկլը, բայց SysteKit/Windoil-ը սահմանափակ է։
- MeDriver/Medenae: ինտեգրումը ամպերի հետ։
- Ամպերը ՝ BrowserStack, Sauce Labs - իրական սարքեր և iOS Safari։
- Պրոֆիլացիա ՝ Chrome DevToocol, Safari Web Inspector (Remote), Firefect Profiler։
- Պերֆի ջութակները ՝ k6/browser RUM-ի համար նման են ասսեթների բեռնման համար։
Խորհուրդ տվեք 3-5 րոպե (smoke) յուրաքանչյուր PR-ի համար 'բեռնաթափում, մեկ խաղային ցիկլ, դադար, կողմնորոշման անցում, պահպանման ստուգում։
6) Արտադրողականություն ՝ 105 մետր և հեռաչափություն
FPS 'կայուն 60 fps (կամ 120 PrOmotion) - ամրագրեք frame pacing, ոչ միայն միջին։
Frame budget: 16. 7 մզ (կամ 8։ 3 ms) divate + render, GC <2-3 ms շրջանակներում։
Input latency: <80 ms entaile, 50 ms desktop։
Time-to-First-Frame (TTFF): < 1. 5 գ (ասսեթների բեռնումից հետո)։
Heap աճ 'ոչ ավելի, քան + 10 տոկոսը նստաշրջանի 20 րոպեում։ runaway allocae-ի բացակայությունը։
Աուդիո latency: <100 ms roundtrip.
Կառուցեք RUM 'ուղարկեք FPS, TTFF, heap, WinGL express lost, rendering սխալները' browser/os/device։
7) Հաճախակի անհամապատասխանությունները և ինչպես բուժել բուժումը
7. 1 Գրաֆիկա/ռենդեր
HiDPI Canvas: տվեք տրամաբանական չափսը = CSS px, ֆիզիկական = «css device PixelRatio»։
DireGL ենթատեքստը lost: Լսեք 'webglcontextlost/webglcontextrestored ", պահպանեք ռեսուրսները վերագործարկման համար։
Տեքստուրներ/շեյդերներ 'խուսափեք ոչ միասնական ընդարձակումներից։ Ստուգեք 'OES _ texture _ float "," EXT _ color _ buffer _ float "և fallback։
DiGPU 'feature-flag; պահեք Peter GL2 ճանապարհը որպես fallback։
7. 2 Աուդիո/ավտոմոբիլային
Սկսեք AudioCorext-ը օգտագործողի ժեստով («tap/click») և պահեք դրոշը «թույլատրված»։- IOS-ում պատրաստվում եք suspend-ին, երբ պտտվում/անցնում եք։
7. 3 Մուտքագրում/ժեստեր
Լսողները լռելյայն են անում։ որտեղ պետք է «www.ventExpress» () - ակնհայտ passive անջատումը։- Pointer Events + Touch Events - խուսափեք կրկնակի մշակումից։ վերափոխեք մուտքագրման շերտը։
- Gamepad: Ստուգեք 'navig.ru։ getGamepads () "RAF-ի համաձայն, հաշվի առեք կոճակների սեղմումը։
7. 4 Fullscreen/Orientation/Safe-Area
IOS-ի համար հաշվի առեք "env" (safe-area-inset-) ", ավելացրեք padding դեպի canvasu/Overlay UI։- Orientation cork-ը միայն user gesture-ից հետո։ կոճակը «շրջեք էկրանը»։
7. 5 Storighi/ofline
IndexeddDB 'Վիրահատությունները վերածեք թայմ-աուտների/ռետրայի; iOS-ի քվոտաները փոքր են, թոքային պահպանեք։
Peter Worker 'ռազմավարություն' «Stale-While-Revalidate» ասելու համար; անկեղծորեն տրամադրեք տարբերակները (բովանդակություն-hash)։
AltalStorage-ը կարող է անհասանելի լինել մասնավոր ռեժիմներում 'նախազգուշացնելով հիշողությանը։
7. 6 Թայմեր/ֆոն
Թայմերը կլամպանում են մինչև 1 s և ավելին։ Կանգնեցրեք ծանր տրամաբանությունը, դադարեք խաղը։
Միացրեք page visibility/« visibility.ru »և event-driven թարմացումները ընդմիջումների փոխարեն։
8) Քրոսբրաուզերի տակ հավաքված հավաքումը
Տեղափոխումը ՝ Windows Script/Babel targets 'es2020 "(կամ ավելի ցածր հին Windows-ի համար)։
Պոլիֆիլները 'միայն ֆիչ (feature detae), ոչ թե UA-ով։- Ասետներ ՝ սպրեյթ թերթիկներ, fallback-ից ձևերով (CorP/PNG), աուդիո (AAC/OGG/Opus)։
- Կոդի բաժանումը 'lazy-chunks խմբագրի/ոչ խաղային կոդերի համար։
- Սեղմումը ՝ Brotli/Zstd; HTTP/2/3; CDN-ն immutable-ի հետ։
- Feature flags: WinGPU/WinscreenCanvas/Threads - միացրեք սպիտակ ցուցակով։
9) Չեկ թերթերի օրինակները
9. 1 սմարթֆոն (Android/Chrome, iPhone/Safari)
- Touch + multi-touch; ժեստերը չեն «ծեծում» էջը
- Fullscreen և կողմնորոշում; safe-area ճիշտ
- Առաջին ձայնը տապից հետո; m.ru աշխատում է
- FPS 3550 (ցածր դաս), առանց «կարմրուկի» շրջանակի։
- Վերագործարկումից հետո առաջընթացի պահպանումը/վերականգնումը
- Ofline բեմը/վերագործարկումը SW
- Հավատացյալների մարտահրավերը (զանգի մի մասը) ճիշտ դադար է։
9. 2 Desktop (Windows/www.OS)
- Մկնիկ + անիվ + ստեղնաշար, IME
- Գեյփադ (XInput/Generic)
- 60/120 Pro մոնիտորներ 'կայուն frame pacing
- Alt-Tab/մի քանի մոնիտորներ/fullscreen/eded
- Հիշողություն <լիմիթ, առանց արտահոսքի (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);
}SysteGL 'ենթատեքստի կորստի վերամշակում
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-ի յուրաքանչյուր մինոր տարբերակը' ռեգրեսիա հաճախակի։
Express OEM: Android-սարքերը հնացած Ռուսաստանի Ֆեդեգրաֆիկայի հետ 'ռիսկերի առանձին շերտ (մուտքագրել «greylist» սարքեր)։
Ֆունկցիոնալ դրոշները 'խնդրահարույց ֆիչին միացրեք բրենդներին/օդաչուների շուկաներին։- Rollout: 1 տոկոսը 10 տոկոսը 2450 տոկոսն է RUM գեյտերի հետ (FPS, crash, TTFF)։
12) Դիտողությունն ու բագ զեկույցները
«Ua ',» «browser version», «os», «device», «gpu/renderer», «memory», «fps», «logs» (սխալներ WingGL/Windio), «steps», «repro video»։
Crash dumps-ի ավտոմատ ուղարկումը (JS/ռեսուրսների սխալները), իրադարձությունները 'exprest lost', «audio unlock failed»։
Dashbords: FPS զննարկիչների/dewisam, միջին TTFF, explext lost, IndexeddDB սխալները, ofline-hite 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) Chek-Show-Show-Show-ի պատրաստակամությունը
[] Արձանագրված է զննարկիչների/տարբերակների/սարքերի և SLA նորարարությունների մատրիցը։
[] Ավտոտեստերի Smoke-հավաքածու (Playwright) սկսվում է PR և nightly; զեկույցները տեսանյութից/թրեյզերից։
[] RUM հեռաչափություն FPS/TTFF/heap/WinGL սխալներ 'զննարկիչների/սարքերի կտրվածքով։
[] Ֆոլբեկի ՝ Lenta.GL1, No GL2, NoGPU; Audio unlock; Pointer/Touch աբստրակցիա։
[] Մշակվել է lifecycle/visibility, pause/resume, www.ru, www.ext lost։
[] Պահպանումը կայուն է (IndexeddDB + դեգրադացիա), imutable ասերների տարբերակը SW/CDN միջոցով։
[] Ավելցուկը իրական սարքերում (iOS/Android) և 60/120 Pro։
[] Հայտնի սահմանափակումների իրականացումը (iOS ավտոպլիա, IDB քվոտաներ, orientation)։
[] Արձագանքման պլանները/feature-flags խնդրահարույց ֆիչի համար (WinGPU/Threads)։
[] Խաղի հետադարձ կապի ալիքը (feedback + log-damp)։
---
Ռեզյումե
HTML5 խաղերի քրոսբրաուզերի համատեղելիությունը ոչ թե մեկ չեկ-բոքսն է «աշխատում է Safari», այլ կարգապահություն 'պլատֆորմների կոշտ մատրիցա, չափված չափումներ (FPS/TTFF/heap), ավտոտեստեր իրական սարքերի վրա, գրաֆիկայի/աուդիո/մուտքագրման և մուտքագրման/հոգ տանել օֆլինի և անվտանգության հետ։ Մուտքագրեք կայուն փորձարկման կետ, հավաքեք RUM-ը և պահեք դրոշները, և խաղը կլինի հավասարապես սահուն և կանխատեսելի Chrome, Safari և Firefox-ում, հեռախոսում և descope-ում։