Ragnarök - एक नया HTML5 पार्सिंग एल्गोरिथ्म के साथ वाइकिंग ब्राउज़र!इस सप्ताह हमारी लैब का निर्माण रग्नारोक डेब्यूस कहा जाता है, जिसमें एचटीएमएल 5 पार्सिंग एल्गोरिदम का हमारा कार्यान्वयन शामिल है। हम चाहेंगे कि आप इस विधानसभा का परीक्षण करें। आप निम्न लिंक उठा सकते हैं।
इस सप्ताह आपको एक शांत HTML5 उदाहरण दिखाई देगा।एचटीएमएल 5 वीडियो प्लेयर, ड्रैग-एंड-ड्रॉप व्हिज़-बैंग्स और एचटीएमएल 5 और "एचटीएमएल 5" के अन्य उदाहरणों पर इंटरनेट गेम से परिपूर्ण है। लेकिन यहां आपको वास्तव में एक दिलचस्प उदाहरण दिखाई देगा, शायद इस सप्ताह सबसे अच्छा। क्या आप तैयार हैं?
तो:
<b><b><i>Yo!</b></i></b>
मैं देख रहा हूं कि आप हैरान हैं, तो चलिए इसका पता लगाते हैं। तत्वों को गलत तरीके से नेस्ट किया जाता है, इस मामले में टैग
<i>
पहले और बंद होना चाहिए। और अलग-अलग ब्राउज़र डोम कैसे बनाते हैं?
हम इसे ओपेरा ड्रैगनफ्लाई और इसके समकक्षों के साथ या
इयान हिकसन के डोम दर्शक के साथ देख सकते हैंइंटरनेट एक्सप्लोरर 9 और सफारी 5 इस परिणाम देंगे:
<!DOCTYPE HTML> <html><HEAD></HEAD><BODY> <B><I>Yo!</I></B><I></I> </BODY></html>
जबकि ओपेरा, फ़ायरफ़ॉक्स और क्रोम इसे देंगे
<!DOCTYPE HTML> <html><HEAD></HEAD><BODY> <B><I>Yo!</I></B> </BODY></html>
सभी ब्राउज़र गलत नेस्टिंग के साथ हल किए गए, लेकिन क्रमिक रूप से नहीं, ध्यान दें कि इंटरनेट एक्सप्लोरर और सफारी में एक अतिरिक्त खाली तत्व है
<i>
, जबकि ओपेरा, फ़ायरफ़ॉक्स और क्रोम में यह नहीं है। क्या सही है? HTML4 में, दोनों सत्य हैं। क्योंकि HTML4 विनिर्देश केवल अच्छे मार्कअप के साथ क्या करना है, इसका वर्णन करता है, लेकिन खराब मार्कअप नहीं है, और हम जानते हैं कि वेब का 95% सत्यापन पास नहीं करता है। इस प्रकार, ब्राउज़र को अपने स्वयं के उपकरणों पर छोड़ दिया जाता है और खुद को यह सोचने के लिए मजबूर किया जाता है कि खराब मार्कअप के साथ क्या करना है, क्योंकि एचटीएमएल 4 विनिर्देश में त्रुटि हैंडलिंग प्रदान नहीं की गई है।
इस तरह के सरल मार्कअप पहले से ही बहुत अलग डोम का उत्पादन करते हैं, और अब कल्पना करते हैं
उन टैग्स के साथ वास्तविक उदाहरणों की एक बड़ी संख्या के परिणामस्वरूप क्या होगा जहां दसियों और सैकड़ों तत्व हैं। जावास्क्रिप्ट कोड लिखना जो इस तरह के बेमेल के साथ सभी ब्राउज़रों में समान रूप से काम करना चाहिए, बालों के झड़ने और वेब डेवलपर्स के बीच रोने का एक मुख्य कारण है।
सौभाग्य से, वर्तमान में इस समस्या का समाधान है।
एचटीएमएल 5 पार्सिंग एल्गोरिथ्म।HTML5 विनिर्देश में किसी भी मार्कअप
को पार्स करने के नियम शामिल
हैं जो वैध और गैर-वैध दोनों हैं। सभी ब्राउज़रों को अपने HTML5 पार्सिंग एल्गोरिदम प्राप्त होने के बाद, एक ही मार्कअप सभी प्रासंगिक ब्राउज़रों में एक ही डोम का उत्पादन करेगा।
इसके दो मुख्य परिणाम हैं:
- जावास्क्रिप्ट कोडर मज़ेदार और रसीले बालों के साथ होंगे
- उपयोगकर्ता अपनी पसंदीदा साइटों और ब्राउज़र के बीच कम असंगति के मुद्दों की उम्मीद कर सकते हैं।
तो क्या सत्यापन अतीत की बात है?बिल्कुल नहीं। यह अभी भी एक महत्वपूर्ण गुणवत्ता आश्वासन उपकरण बना हुआ है, और सिर्फ इसलिए कि HTML5 पार्सिंग एल्गोरिथ्म वापस एक संगत डोम चलाएगा इसका मतलब यह नहीं है कि यह वह डोम है जिसकी आपको आवश्यकता है।
ओपेरा कार्यान्वयनहमारा पुराना HTML पार्सिंग एल्गोरिथ्म 15 साल पहले जो लिखा गया था, उस पर आधारित था। इसे लगातार बदलते मानकों और विनिर्देश का पालन नहीं करने के कई तरीकों के साथ जोड़ा जा रहा था। सभी परिवर्तनों के बाद, कोड एक पुनरावर्ती क्रिसमस पेड़ की तरह लगने लगा और नई विशेषताओं को जोड़ना पूरे पेड़ पर दस्तक दिए बिना बहुत मुश्किल हो गया।
पार्सिंग एल्गोरिथ्म को फिर से लिखने के निर्णय के साथ, पूरे डिजाइन को साफ करना संभव हो गया।
अब हम गर्व के साथ घोषणा कर सकते हैं कि नई Ragnarök पार्सर HTML5lib पर आधारित HTML5 विनिर्देश के अनुपालन के लिए परीक्षण 99.9% से उत्तीर्ण करता है। रागनारोक सोने के समय तक लापता 0.1% का एहसास होगा। परीक्षणों का पूरा सेट भी प्रकाशित किया जाएगा और आप अपने लिए सब कुछ देख सकते हैं, अच्छी तरह से, और विभिन्न ब्राउज़रों में लिप्त हो सकते हैं।
Ragnarök भी कुछ अपूर्ण (और इसलिए भ्रामक)
HTML5test.com पर 11 में से 11 (प्लस 2 बोनस अंक)
स्कोर करता है (HTML5 में एम्बेडेड SVG और MathML के लिए दो बोनस अंक)
मेमोरी की खपतगरीब मार्कअप के साथ काम करते समय हमने पुराने एल्गोरिदम को इतने लंबे समय तक रखने का मुख्य कारण इसकी स्मृति का कुशल उपयोग है। HTML5 विनिर्देश में निर्दिष्ट नोड्स को डुप्लिकेट करने के बजाय, हमारे एल्गोरिथ्म में पॉइंटर्स की एक जटिल प्रणाली थी जो यह निर्धारित करती थी कि किन नोड्स को डुप्लिकेट किया जाना चाहिए। इसने उसे स्मृति के अनावश्यक आवंटन से बचा लिया, हालांकि, और पूरे कोड को बहुत जटिल कर दिया। अब हमने नोड्स की प्रतिलिपि बनाने के लिए स्विच किया है, जिसके लिए थोड़ी अधिक रैम की आवश्यकता होती है। अंतिम रिलीज से पहले, हम इस दुष्प्रभाव को कम करते हैं, क्योंकि ओपेरा ने हमेशा स्मृति के कुशल उपयोग और छोटे उपकरणों पर काम करने की परवाह की है।
उत्पादकतायह अभी स्पष्ट नहीं है क्योंकि यह एक तकनीकी डेमो है और यह रिलीज जैसी गति के लिए अनुकूलित नहीं है, हालांकि उत्पादकता बढ़ाने के लिए यह एक और फायदा है। चूंकि HTML कोड पार्स करने का समय रेंडरिंग और पेज लोडिंग की तुलना में अपेक्षाकृत कम है, इसलिए समग्र प्रदर्शन लाभ इतना ध्यान देने योग्य नहीं होगा, लेकिन क्या बेहतर के लिए सभी प्रदर्शन सुधार हैं?
इसे गर्म करते हुए पकड़ो!ऊपर दिए गए लिंक डाउनलोड करें।
सावधानीयह एक तकनीकी डेमो है और इसमें कुछ चीजें काम नहीं कर सकती हैं, उदाहरण के लिए एम 2 में कुछ समस्याएं हैं।
यहाँ पार्सर या त्रुटियों के बारे में अपनी टिप्पणी छोड़ दें।