HTML5 खेलों की क्रॉस-ब्राउज़र संगतता: परीक्षण मैट्रिक्स
1) क्यों HTML5 गेम "चोट" क्रॉस-ब्राउज़िंग
खेल मंच की लगभग सभी परतों को प्रभावित करते हैं: ग्राफिक्स (कैनवास/वेबजीएल/वेबजीपीयू), टाइमर और स्ट्रीम (आरएएफ/वर्कर्स), साउंड (वेबऑडियो/मीडिया पॉलिसियां), इनपुट (कीबोर्ड/पॉइंटर/टच/गेमपैड), नेटवर्स्स्स्स/Indepad exedDB), एकीकरण (फुलस्क्रीन/ओरिएंटेशन/PWA)। विभिन्न इंजन - क्रोमियम (क्रोम/एज/ओपेरा/एंड्रॉइड), वेबकिट (सफारी/मैकओएस, सभी ब्राउज़र में आईओएस/आईपैडोस), गेको (फायरफॉक्स)। पावर सेविंग, थ्रॉटलिंग बैकग्राउंड टैब, मेमोरी लिमिट और ऑटोप्ले पॉलिसी में अंतर।
2) समर्थित वातावरण: लक्ष्य मैट्रिक्स
ब्राउज़र/ओएस (न्यूनतम संस्करण एक उदाहरण हैं, अपने एसएलए को स्थानापन्न करें):- डेस्कटॉप: Chrome/Edge 116 +, Firefox 115 +, Safari 16 + (macOS 12 +)।
- मोबाइल: Chrome Android 116 + (Android 9 +), Samsung Internet 21 +, Safari iOS/iPadOS 16 +।
- WebView: Android WebView 116 +, iOS - केवल WebKit (iOS पर सभी ब्राउज़र वेबकिट का उपयोग करते हैं)।
- PWA (स्थापना): क्रोमियम डेस्कटॉप/मोबाइल, सफारी iOS 16। 4 + (प्रतिबंधों के साथ होम स्क्रीन में जोड़ें)।
- कम (मोबाइल बजट, 2 जीबी रैम)
- मध्यम (मोबाइल/अल्ट्राबुक, 4-8 जीबी रैम)
- उच्च (डेस्कटॉप/उपभोक्ता जीपीयू, 8-16 + जीबी)
3) बड़े परीक्षण मैट्रिक्स (टेम्पलेट)
अपने ट्रैकर में एक वास्तविक तालिका बनाएं। नीचे प्रमुख ब्लॉक और स्टेटस (ओके/आंशिक/एन/ए) हैं जिन्हें मापने की आवश्यकता है।
3. 1 ग्राफिक्स
3. 2 ऑडियो और मीडिया नीतियां
3. 3 इनपुट और इंटरफ़ेस
3. 4 प्रदर्शन और ऊर्जा की बचत
3. 5 सहेजता/ऑफ़लाइन/नेटवर्क
4) मैनुअल स्क्रिप्ट का न्यूनतम सेट (धुआं)
1. पहली शुरुआत: परिसंपत्तियों को लोड करना, छपना, स्तर शुरू करना <3 s मध्यम वर्ग पर।
2. इनपुट: टच/माउस/कीबोर्ड/गेमपैड, कई उंगलियां, होल्ड, स्वाइप्स।
3. स्क्रीन: फुल स्क्रीन, ओरिएंटेशन लॉक, सेफ-एरिया (बैंग्स के साथ iPhone)।
4. ऑडियो: कस्टम इशारा, म्यूट/अनम्यूट, म्यूजिक मिक्स/एफएक्स के बाद पहला नोट।
5. WebGL: संदर्भ की हानि/वसूली (अनुकरण), छाया/छाया/स्केल।
6. जीवन चक्र: पतन/विस्तार, कॉल/सूचना, पृष्ठभूमि में टैब।
7. सहेजता: IndexedDB/LocalStore में प्रगति/सेटिंग्स, पुनः प्रारंभ/ऑफ़लाइन के बाद वसूली.
8. नेटवर्क: 3 जी थ्रॉटल/हाई आरटीटी, नेटवर्क लॉस, रिट्रे, एसडब्ल्यू के माध्यम से कैशिंग।
9. PWA: संस्थापना (क्रोमियम/iOS), प्रतीक, ऑफ़ लाइन पृष्ठ, संस्करण अद्यतन.
10. लंबा सत्र: लीक के बिना 20-30 मिनट (FPS/ढेर स्थिर)।
5) स्वचालन: कैसे और कैसे
नाटककार (अनुशंसित): क्रॉस-इंजन, मोबाइल अनुकरण, वेबकिट ड्राइवर, वीडियो/ट्रैक।
सरू: तेजी से देव लूप, लेकिन वेबकिट/मोबाइल सीमित है।
वेबड्राइवर/सेलेनियम: क्लाउड एकीकरण।
बादल: ब्राउज़रस्टैक, सॉस लैब्स - असली उपकरण और आईओएस सफारी।
प्रोफाइलिंग: Chrome DeveTools प्रोटोकॉल, सफारी वेब इंस्पेक्टर (रिमोट), फ़ायरफ़ॉक्स प्रोफाइलर।
पर्फ स्क्रिप्ट: RUM जैसी परिसंपत्ति लोडिंग स्क्रिप्ट के लिए k6/ब्राउज़र।
टिप: प्रत्येक पीआर के लिए 3-5 मिनट (धुएं) के लिए ऑटोटेस्ट का "पैकेज" रखें: लोडिंग, एक गेम चक्र, ठहराव, स्विचिंग ओरिएंटेशन, चेकिंग सेव।
6) प्रदर्शन: लक्ष्य मैट्रिक्स और टेलीमेट्री
एफपीएस: स्थिर 60 एफपीएस (या प्रोमोशन पर 120) - फ्रेम पेसिंग पर कब्जा करें, न कि केवल औसत।
फ्रेम बजट: 16। 7 एमएस (या 8)। 3 ms) अपडेट + रेंडर पर, GC <2-3 ms प्रति फ्रेम।
इनपुट विलंबता: <80 ms मोबाइल, 50 ms डेस्कटॉप
समय-से-प्रथम फ़्रेम (TTFF): <1. 5 एस (संपत्ति लोड करने के बाद)।
ढेर वृद्धि: सत्र के 20 मिनट में + 10% से अधिक नहीं; भगोड़े आवंटन की कमी।
ऑडियो विलंबता: <100ms राउंडट्रिप।
एम्बेड RUM: FPS, TTFF, ढेर, WebGL संदर्भ टेलीमेट्री खो दिया, 'ब्राउज़र/ओएस/डिवाइस' द्वारा त्रुटियों का प्रतिपादन।
7) बार-बार असंगति और इलाज कैसे करें
7. 1 ग्राफिक्स/रेंडर
HiDPI कैनवस-सेट तार्किक आकार = CSS px, भौतिक = 'css DivePixelRatio'।
WebGL संदर्भ खो दिया: 'webglcontextlost/webglcontextrestored' सुनें, रिबूट के लिए संसाधनों को संग्रहीत करें।
बनावट/छाया: गैर-सार्वभौमिक एक्सटेंशन से बचें; OES _ tructure _ float, EXT _ color _ buffloat, और fallback की जाँच करें.
WebGPU: रोल फीचर-फ्लैग; WebGL2 पथ को एक नतीजे के रूप में रखें।
7. 2 ऑडियो/ऑटोप्ले
मनपसंद हावभाव ('टैप/क्लिक') के साथ ऑडियोकॉन्फ्रेंस प्रारंभ करें और "स्वीकार्य" ध्वज रखें.
IOS पर, कम से कम/स्विचिंग करते समय निलंबित करने की तैयारी करें।
7. 3 इनपुट/इशारे
घटनाओं के श्रोता डिफ़ॉल्ट रूप से निष्क्रिय करते हैं; जहाँ 'preventDefault ()' स्पष्ट रूप से निष्क्रिय करना है।
पॉइंटर इवेंट्स + टच इवेंट्स - डबल प्रोसेसिंग से बचें; इनपुट परत को सार करें।
गेमपैड: 'नेविगेटर की जाँच करें। गेटपैड () 'आरएएफ के माध्यम से, बटन के लेआउट को ध्यान में रखें।
7. 4 फुलस्क्रीन/ओरिएंटेशन/सेफ-एरिया
IOS के लिए, 'env (सुरक्षित-क्षेत्र-inset-)' पर विचार करें, कैनवास/ओवरले यूआई में पैडिंग जोड़ें।
अभिविन्यास लॉक केवल उपयोगकर्ता इशारे के बाद; एक "घूर्णन स्क्रीन" बटन है।
7. 5 Storigi/Offline
IndexedDB: टाइमआउट/रिट्रे में रैप ऑपरेशन; आईओएस पर, कोटा छोटे होते हैं - हल्की बचत रखते हैं।
सेवा कार्यकर्ता: संपत्ति के लिए 'बासी-जबकि-पुनरावर्ती' रणनीति; ईमानदारी से अक्षम संस्करण (सामग्री-हैश)।
लोकल स्टोरेज निजी मोड में उपलब्ध नहीं हो सकता है - चेतावनी स्मृति के लिए अपमानित।
7. 6 टाइमर/पृष्ठभूमि
पृष्ठभूमि में, टाइमर 1 एस या अधिक तक टकराते हैं। भारी तर्क बंद करें, खेल को रोकें।
अंतराल के बजाय पृष्ठ दृश्यता/' visibilitychange 'और घटना-चालित अद्यतन सक्षम करें.
8) क्रॉसब्राउज़र के लिए पाइपलाइन असेंबली
ट्रांसपिलेशन: टाइपस्क्रिप्ट/बैबेल लक्ष्य 'es2020' (या पुराने वेबव्यू के लिए कम)।
पॉलीफिल्स: केवल सुविधा का पता लगाना, यूए नहीं।
संपत्ति: स्प्राइट शीट, फॉलबैक प्रारूपों के साथ बनावट (वेब/पीएनजी), ऑडियो (एएसी/ओजीजी/ओपस)।
कोड पृथक्करण: संपादक/गैर-खेल पैनल के लिए आलसी-चंक।
संपीड़न: Brotli/Zstd; HTTP/2/3; अपरिवर्तनीय-वर्शन के साथ सीडीएन।
फ्लैग्स: WebGPU/OffsCreenCanvas/Threads - श्वेतसूची द्वारा सक्षम।
9) चेकलिस्ट टेम्पलेट्स
9. 1 स्मार्टफोन (Android/Chrome, iPhone/Safari)
- टच + मल्टी-टच; इशारे पृष्ठ को "पुल" नहीं करते हैं
- फुलस्क्रीन और अभिविन्यास; सुरक्षित क्षेत्
- नल के बाद पहली आवाज़; म्यूट काम करता है
- FPS ≥ 50 (निम्न वर्ग), कोई रैग्ड फ्रेम नहीं
- पुनः प्रारंभ करने के बाद प्रगति सहेजें/पुनर्स्
- ऑफ़ लाइन दृश्य/SW पुनः प्रारंभ
- सिस्टम ओवरले कॉल (इनकमिंग कॉल) → सही ठहराव
9. 2 डेस्कटॉप (Windows/macOS)
- माउस + पहिया + कुंजीपटल, IME
- गेमपैड (XInput/Jeneric)
- मॉनिटर: स्थिर फ्रेम पेसिंग
- Alt-Tab/मल्टीपल मॉनिटर/फुलस्क्रीन/विंडोज़
- मेमोरी <सीमा, कोई लीक नहीं (20 + मिनट)
10) कोड उदाहरण (टुकड़े)
कैनवास HiDPI:js फ़ंक्शन resizCanvas (कैनवास) {
const dpr = मैथ। मिनट (विंडो)। DivePixelRatio         1, 2);
Const {clientWidth: w, clientHeight: h} = canvas;
कैनवास। चौड़ाई = मैथ। फर्श (डब्ल्यू डीपीआर);
कैनवास। ऊंचाई = मैथ। फर्श (एच डीपीआर);
const ctx = कैनवास। संदर्भ ('2d');
ctx। सेटट्रांसफॉर्म (डीपीआर, 0, 0, डीपीआर, 0, 0);
}js const gl = कैनवास। प्रसंग ('वेबजीएल', {Press   बफर: गलत});
कैनवास। AddeventListener ('webglcontextlost', e => {e.  default (); ठहराया = सच;});
कैनवास। AddeventListener ('webglcontextrestored', () => {reloadResources (); ठहराया = गलत;});js audiounlocked = गलत;
विंडो। AddeventListener ('पॉइंटरडाउन', () => {
यदि (! ऑडियोअनलॉक) {
const ctx = नया AudioConference ();
const b = ctx। क्रिएबफर (1, 1, 22050);
const s = ctx। CreatBufferSource ();
एस। बफर = बी; एस। कनेक्ट (ctx। गंतव्य); एस। स्टार्ट (0);
ऑडियोअनलॉक = सही;
}
}, {एक बार: सही, निष्क्रिय: सही});जेएस दस्तावेज़। AddeventListener ('visibilitychange', () => {
यदि (दस्तावेज़) छिपा हुआ) p  game ();
और फिर से गेम ();
});11) जोखिम प्रबंधन और प्राथमिकता
IOS के लिए मर्फी का नियम: अपने मैट्रिक्स से iOS के हर मामूली संस्करण का परीक्षण करें - रेग्रेशन अक्सर होते हैं।
WebView OEM: पुराने वेबव्यू वाले एंड्रॉइड डिवाइस एक अलग जोखिम परत हैं ("ग्रेलिस्ट" डिवाइस दर्ज करें)।
कार्यात्मक झंडे: ब्रांड/बाजार-पायलटों द्वारा समस्या सुविधाएं शामि
रोलआउट: RUM गेट्स (FPS, क्रैश, TTFF) के साथ 1% → 10% → 50% → 100%।
12) अवलोकन और बग रिपोर्ट
प्रत्येक बग रिपोर्ट में शामिल करें: 'ua', 'ब्राउज़र संस्करण', 'ओएस', 'उपकरण', 'gpu/renderer', 'मेमोरी', 'fps', 'logs (WebGL/Webaudio त्रुटियाँ)', 'स्टेप्रो वीडियो'।
क्रैश डंप (JS त्रुटियों/संसाधनों), 'संदर्भ खो', 'ऑडियो अनलॉक असफल' घटनाओं के स्वचालित भेजना.
डैशबोर्ड: ब्राउज़र/डिवाइस द्वारा एफपीएस, औसत टीटीएफएफ, संदर्भ खोया हुआ शेयर, इंडेक्सडीबी त्रुटियां, एसडब्ल्यू ऑफ़ लाइन हिट।
13) अंतिम टेम्पलेट मैट्रिक्स (सीएसवी मछली)
प्लेटफ़ॉर्म, ब्राउज़र, संस्करण, फ़ीचर, परिदृश्य, अपेक्षित, स्थिति, नोट्स
Android, Chrome, 116 +, WebGL2, संदर्भ खो/बहाल, राज्य बहाल, ओके, iOS,Safari,16। 6,Audio,First नल, प्ले, PARTIAL, साइलेंट स्विच पर ध्वनि प्रभावित करता है
डेस्कटॉप, फ़ायरफ़ॉक्स, 115 +, फुलस्क्रीन, एंटर/एग्जिट, नो लेआउट जंप, ओके, एंड्रॉइड, वेबव्यू, 116 +, स्टोरेज, इंडेक्सडीबी कोटा, डिवाइस एक्स iOS,Safari,16 पर 5MB,PARTIAL,Quota लोअर सहेजें। 4 +, PWA, इंस्टॉल और रिलॉन्च, राज्य कायम रहा, ठीक है, "'
---
14) उत्पादन तत्परता चेकलिस्ट
[] फिक्स्ड ब्राउज़र/संस्करण/डिवाइस मैट्रिक्स और एसएलए अपडेट।
[] ऑटोटेस्ट (नाटककार) का धुआं-सेट पीआर और रात को लॉन्च किया जाता है; वीडियो/ट्रैक्स के साथ रिपोर
[] RUM टेलीमेट्री FPS/TTFF/heap/WebGL ब्राउज़र/डिवाइस सेक्शन के साथ त्रुटियां।
[] फोल्बेकी: WebGL1 ← WebGL2 ← WebGPU; ऑडियो अनलॉक; पॉइंटर/टच अमूर्तता।
[] संसाधित जीवनचक्र/दृश्यता, ठहराव/फिर से शुरू, ऑफ़ लाइन, संदर्भ खो दिया।
[] दृढ़ ता स्थिर है (IndexedDB + गिरावट), परिसंपत्ति संस्करण SW/CDN के माध्यम से अपरिवर्तनीय है।
[] वास्तविक उपकरणों (iOS/Android) और 60/120 हर्ट्ज डेस्कटॉप पर प्रोफाइल।
[] ज्ञात प्रतिबंधों का प्रलेखन (आईओएस ऑटोप्लेज, आईडीबी कोटा, अभिविन्यास)।
[] समस्याग्रस्त सुविधाओं (WebGPU/थ्रेड्स) के लिए रोलबैक प्लान/फीचर-फ्लैग।
[] खेल में फीडबैक चैनल (फीडबैक + लॉग डंप)।
---
सारांश फिर से शुरू करें
HTML5 गेम्स की क्रॉस-ब्राउज़र संगतता एक चेक बॉक्स नहीं है "सफारी में काम करता है", लेकिन एक अनुशासन: एक कठोर प्लेटफ़ॉर्म मैट्रिक्स (FPS/TTFF/ढेर), असली उपकरता है। ऑफ़ लाइन और बचत के साथ काम करते हैं। एक स्थिर परीक्षण पाइपलाइन दर्ज करें, RUM इकट्ठा करें और झंडे के पीछे की सुविधाओं को रखें - इस तरह से गेम आपके फोन और डेस्कटॉप पर Chrome, Safari और Firefox पर समान रूप से चिकना और अनुमानित होगा।