क्या HTML विशेषताओं की लंबाई की कोई सीमा है?


213

HTML में विशेषता मान के लिए कितना लंबा है?

मैं data-foo="bar"एक नए एप्लिकेशन में एचटीएमएल 5 शैली डेटा विशेषताओं ( ) का उपयोग कर रहा हूं , और एक स्थान पर डेटा का एक उचित झूला (100 वर्णों से ऊपर) स्टोर करना वास्तव में आसान होगा। जबकि मुझे संदेह है कि यह राशि ठीक है, यह सवाल उठाता है कि कितना बहुत अधिक है?


1
जानकारी के लिए, एक अन्य विशेषता बहुत लंबी होने की उम्मीद है iframe@srcdoc( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) - [HTML5.2 जिसमें संपूर्ण दस्तावेज़ शामिल है ( मैंने सुना है कि आपको दस्तावेज़ बहुत पसंद हैं (…) )
फेलिपएल्स

जवाबों:


265

HTML 4

एक HTML 4 परिप्रेक्ष्य से, विशेषताएँ एक SGML निर्माण हैं। उनकी सीमाओं को HTML 4 के SGML घोषणा में परिभाषित किया गया है :

         गुणवत्ता SGMLREF
                  ATTCNT 60 - बढ़ा -
                  ATTSPLEN 65536 - ये सबसे बड़े मूल्य हैं -
                  LITLEN 65536 - घोषणा में अनुमत -
                  NAMELEN 65536 - वास्तविक में तय सीमा से बचें -
                  PILEN 65536 - HTML यूए के कार्यान्वयन -
                  TAGLVL 100
                  TAGLEN 65536
                  GRPGTCNT 150
                  जीआरपीसीएनटी 64

यहाँ प्रश्न में मूल्य "ATTSPLEN" है जो किसी तत्व की विशेषता विनिर्देश सूची पर सीमा होगी (जो उस तत्व के लिए सभी विशेषताओं का कुल आकार होना चाहिए)। ऊपर दिए गए नोट में कहा गया है कि निश्चित सीमा से बचना चाहिए, हालाँकि, इसलिए यह संभावना है कि अधिकांश कार्यान्वयन में उपलब्ध स्मृति के अलावा कोई वास्तविक सीमा नहीं है।

HTML 5

HTML 5 भिन्न प्रतीत होता है, जैसा कि युक्ति कहती है, "HTML का यह संस्करण इस प्रकार गैर-एसजीएमएल आधार पर वापस आता है।"

बाद में, HTML 5 को पार्स करने के तरीके का वर्णन करते समय, निम्न मार्ग प्रकट होता है ( जोर जोड़ा):

नीचे वर्णित एल्गोरिदम उत्पन्न डोम ट्री की गहराई पर कोई सीमा नहीं है , या टैग नाम, विशेषता नाम, विशेषता मान , पाठ नोड्स आदि की लंबाई पर है , जबकि कार्यान्वयनकर्ताओं को मनमानी सीमा से बचने के लिए प्रोत्साहित किया जाता है, यह माना जाता है कि व्यावहारिक चिंताएं संभावना है कि उपयोगकर्ता एजेंटों को नेस्टिंग की गहराई में बाधा डालने के लिए मजबूर किया जाएगा।

तो मुझे लगता है कि आपका जवाब है।


25
तो जवाब "असीमित" होना चाहिए?
एंडर्स लिंडेन

1
धन्यवाद! हालाँकि, मैं इसे बढ़ा नहीं सकता - यह उत्तर अद्भुत होगा यदि इसे किसी चीज़ के साथ पूर्वनिर्मित किया गया हो, "HTML विशेषताएँ सैद्धांतिक रूप से कोई सीमा नहीं हैं।" इस तरह के एक सरल जवाब के साथ आने के लिए बहुत कुछ पढ़ना है।
रिनोगो

144

मैंने सिर्फ एक परीक्षण लिखा है जो एक विशेषता में 10 मिलियन की लंबाई रखता है और फिर इसे फिर से प्राप्त करता है, और यह ठीक काम करता है (फ़ायरफ़ॉक्स 3.5.2 और इंटरनेट एक्सप्लोरर 7)

50 मिलियन ब्राउज़र को "यह स्क्रिप्ट पूरी होने में लंबा समय लग रहा है" संदेश के साथ हैंग हो जाता है।


4
10 मिलियन डेटा की इतनी बड़ी राशि है।
रहुल

3
मैंने सिर्फ उस स्क्रिप्ट को 50 मिलियन में सेट करने के लिए एडिट किया और इसने काम किया, लेकिन इसे 100 मिलियन में सेट करने से पहले क्रोम में टैब को मार दिया, इससे पहले कि मुझे इसका परीक्षण करने का मौका मिला। : P
cHao

4
@nickf: यह व्यावहारिक रूप से सीमित है (उदाहरण के लिए स्मृति द्वारा) लेकिन सैद्धांतिक रूप से असीमित?)
टिम शाल्टर

स्मृति से बाहर दुर्घटनाग्रस्त
होल्मियम

सीधे माल के लिए धन्यवाद। अगर मैं एसजीएमएल कल्पना पढ़ना चाहता था, तो मैं एसजीएमएल कल्पना देखूंगा!
रिनोगो

6

मुझे नहीं लगता कि कोई सीमा है। मुझे पता है कि अब आप कर सकते हैं

<a onclick=" //...insert 100KB of javascript code here">

और यह ठीक काम करता है। अलबत्ता थोड़ा अपठनीय।


27
थोड़ा सा। -----
पॉल ड्रेपर

4

से एचटीएमएल 5 वाक्यविन्यास डॉक

9.1.2.3 गुण

किसी तत्व के लिए गुण तत्व के प्रारंभ टैग के अंदर व्यक्त किए जाते हैं।

गुण का एक नाम और एक मूल्य होता है। विशेषता नाम में अंतरिक्ष वर्णों के अलावा एक या एक से अधिक वर्ण होने चाहिए, U + 0000 NULL, U + 0022 QUOTATION MARK ("), U + 0027 APOSTROPHE ('), U + 003E GREENER-THAN SIGN (>), U + 002F SOLIDUS (/), और U + 003D EQUALS SIGN (=) अक्षर, नियंत्रण वर्ण और यूनिकोड द्वारा परिभाषित कोई भी वर्ण नहीं है। HTML सिंटैक्स में, निचले-और अपरकेस अक्षरों के किसी भी मिश्रण के साथ विशेषता नाम लिखे जा सकते हैं। विशेषता के नाम के लिए ASCII केस-असंवेदनशील मैच हैं।

विशेषता मान पाठ और चरित्र संदर्भों का मिश्रण है, अतिरिक्त प्रतिबंध के अलावा कि पाठ में अस्पष्ट एम्परसेंड नहीं हो सकता है।

विशेषताएँ चार अलग-अलग तरीकों से निर्दिष्ट की जा सकती हैं:

  1. खाली विशेषता सिंटैक्स

  2. अयोग्य विशेषता मान सिंटैक्स

  3. एकल-उद्धृत विशेषता मान सिंटैक्स

  4. डबल-उद्धृत विशेषता मान सिंटैक्स

यहाँ विशेषता मान के आकार की सीमा का उल्लेख नहीं किया गया है। इसलिए मुझे लगता है कि कोई नहीं होना चाहिए।

आप अपने दस्तावेज़ को इसके विरुद्ध मान्य भी कर सकते हैं

HTML5 Validator (अत्यधिक प्रायोगिक)


1

मैंने विशेषताओं की लंबाई पर किसी भी सीमा के बारे में कभी नहीं सुना है।

HTML 4.01 विनिर्देशों में, विशेषताओं पर अनुभाग में ऐसा कुछ भी नहीं है जो इस पर किसी भी सीमा का उल्लेख करता है।

HTML 4.01 DTD में समान - वास्तव में, जहाँ तक मुझे पता है, DTD आपको विशेषताओं की लंबाई निर्दिष्ट करने की अनुमति नहीं देता है।

अगर HTML 4 में उस बारे में कुछ नहीं है, तो मुझे ऐसा कुछ भी नहीं लगता है कि यह HTML 5 के लिए दिखाई देगा - और मुझे वास्तव में HTML 5 के लिए 9.1.2.3 विशेषताएँ अनुभाग में कोई लंबाई सीमा दिखाई नहीं देती है ।


1

से http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data :

प्रत्येक HTML तत्व में किसी भी मूल्य के साथ निर्दिष्ट कस्टम डेटा विशेषताओं की संख्या हो सकती है।

जो इन डेटा को पार्स / प्रोसेस करने के लिए उपयोग किया जाता है- * विशेषता मानों की सीमाएँ होंगी।

डेटा-विशेषताएँ और मानों को एक DOMStringMap ऑब्जेक्ट में रखा जाता है। इसकी कोई अंतर्निहित सीमा नहीं है।

से http://dev.w3.org/html5/spec/Overview.html#domstringmap :

नोट: यहाँ DOMStringMap इंटरफ़ेस परिभाषा केवल जावास्क्रिप्ट वातावरण के लिए है। अन्य भाषा बाइंडिंग को परिभाषित करने की आवश्यकता होगी कि उन भाषाओं के लिए DOMStringMap कैसे लागू किया जाए

DOMStringMap गेट्टर, सेटर, ग्रेट और डेलेटर के साथ एक इंटरफ़ेस है। सेटर में दो मानक होते हैं DOMString, नाम और मूल्य। मान एक प्रकार का DOMString है जिसे सीधे जावास्क्रिप्ट स्ट्रिंग पर मैप किया जाता है।

से http://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:

जावास्क्रिप्ट स्ट्रिंग की अधिकतम लंबाई विशिष्ट कार्यान्वयन है।

[नोट: क्रोम बाइट्स डॉट कॉम को मैलवेयर के स्रोत के रूप में रिपोर्ट कर रहा है, इसलिए सावधान]


0

एसजीएमएल 65k चौराहों के एक सीमा सेट के साथ विशेषताओं को परिभाषित करता है, यहां देखा गया है: http://www.highdots.com/forums/html/length-html-attribute-175546.html

यद्यपि आप जो कर रहे हैं, उसके लिए आपको ठीक होना चाहिए। ऊपरी सीमाओं के लिए, मैंने देखा है कि jQuery उपयोग डेटा विशेषताओं के साथ-साथ डेटा पर्सन की कुछ k होल्ड होती है।


5
HTML5 एक SGML- आधारित भाषा नहीं है।
विलियम ब्रेंडल

0

एज (संस्करण 81.0.416.58 (64 बिट)) में हाल ही में परीक्षण किया गया, और डेटा-विशेषताओं में 64k की सीमा प्रतीत होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.