HTML의 속성 값이 너무 오래 걸립니까?
data-foo="bar"
새 응용 프로그램에서 HTML5 스타일 데이터 속성 ( )을 사용하고 있으며 한 곳에서는 데이터를 상당히 많이 저장 (100 자 이상)하는 것이 정말 편리합니다. 나는이 금액이 괜찮다고 생각하지만 너무 많은 양에 대한 질문을 제기합니까?
답변
HTML 4
HTML 4 관점에서 속성은 SGML 구문입니다. 이들의 한계는 HTML 4 의 SGML 선언에 정의되어 있습니다 .
수량 SGMLREF ATTCNT 60-증가- ATTSPLEN 65536-가장 큰 값입니다- LITLEN 65536-선언에 허용- NAMELEN 65536-실제 고정 한계를 피하십시오- PILEN 65536-HTML UA 구현- TAGLVL 100 태 글런 65536 GRPGTCNT 150 GRPCNT 64
여기서 문제가되는 값은 “ATTSPLEN”이며 이는 요소의 속성 사양 목록 (해당 요소에 대한 모든 속성의 총 크기 여야 함)에 대한 제한입니다. 그러나 위에서 언급 한 바에 따르면 고정 된 제한은 피해야하므로 대부분의 구현에서 사용 가능한 메모리 이외의 실제 제한은 없을 것입니다.
HTML 5
HTML 5는 다음과 같이 서로 다른 것 같다 사양은 말한다, “비 SGML 기반으로 HTML이 버전은 이렇게 돌아갑니다.”
나중에 HTML 5를 구문 분석하는 방법을 설명 할 때 다음 구절이 나타납니다 ( 강조 추가).
아래에 설명 된 알고리즘은 생성 된 DOM 트리의 깊이 또는 태그 이름, 속성 이름, 속성 값 , 텍스트 노드 등 의 길이에 제한 을 두지
않습니다 . 사용자 에이전트가 중첩 깊이 제약 조건을 강요 할 수 있습니다.
그래서 나는 그것이 당신의 대답이라고 생각합니다.
답변
방금 1000 만 길이의 문자열을 속성에 넣은 다음 다시 검색하여 정상적으로 작동 하는 테스트 를 작성했습니다 (Firefox 3.5.2 및 Internet Explorer 7)
“이 스크립트는 완료하는 데 시간이 오래 걸립니다”라는 메시지와 함께 5 천만 개의 브라우저가 중단됩니다.
답변
나는 정말로 한계가 없다고 생각합니다. 난 이제 네가 할 수 있다는 걸 알아
<a onclick=" //...insert 100KB of javascript code here">
잘 작동합니다. 조금 읽을 수는 없지만.
답변
에서 HTML5 구문 문서
9.1.2.3 속성
요소의 속성은 요소의 시작 태그 안에 표시됩니다.
속성에는 이름과 값이 있습니다. 속성 이름은 공백 문자 이외의 하나 이상의 문자, U + 0000 NULL, U + 0022 QUOTATION MARK ( “), U + 0027 APOSTROPHE ( ‘), U + 003E GREATER-THAN SIGN (>), U + 이외의 문자로 구성되어야합니다. 002F SOLIDUS (/) 및 U + 003D EQUALS SIGN (=) 문자, 제어 문자 및 유니 코드로 정의되지 않은 문자 HTML 구문에서 속성 이름은 소문자와 대문자를 혼합하여 쓸 수 있습니다. 속성 이름에 대해 대소 문자를 구분하지 않는 ASCII 일치입니다.
속성 값은 텍스트에 모호한 앰퍼샌드를 포함 할 수 없다는 추가 제한 사항을 제외하고 텍스트와 문자 참조를 혼합 한 것입니다.
속성은 다음 네 가지 방법으로 지정할 수 있습니다.
빈 속성 구문
따옴표없는 속성 값 구문
작은 따옴표로 묶은 속성 값 구문
큰 따옴표로 묶은 속성 값 구문
여기에서는 속성 값의 크기에 대한 제한을 언급하지 않았습니다. 그래서 나는 아무것도 없어야한다고 생각합니다.
당신은 또한에 대해 문서의 유효성을 검사 할 수 있습니다
답변
나는 속성의 길이에 대한 제한을 들어 본 적이 없다.
HTML 4.01 스펙의 속성 섹션 에는 이에 대한 제한 사항이 없습니다.
HTML 4.01 DTD 와 동일합니다 . 사실, DTD는 속성 길이를 지정할 수 없습니다.
HTML 4에 그것에 대해 아무것도 없다면 HTML 5에 대해 그렇게 보일 것이라고 상상하지 못합니다 .HTML 5 의 9.1.2.3 속성 섹션 에도 길이 제한이 없습니다 .
답변
에서 http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data :
모든 HTML 요소에는 값을 지정하여 여러 개의 사용자 정의 데이터 속성을 지정할 수 있습니다.
이러한 data- * 속성 값을 구문 분석 / 처리하는 데 사용되는 값에는 제한이 있습니다.
데이터 속성을 확인하고 값이 DOMStringMap 객체에 배치됩니다. 이것은 고유 한 제한이 없습니다.
에서 http://dev.w3.org/html5/spec/Overview.html#domstringmap :
참고 : 여기서 DOMStringMap 인터페이스 정의는 JavaScript 환경만을위한 것입니다. 다른 언어 바인딩은 해당 언어에 대해 DOMStringMap을 구현하는 방법을 정의해야합니다.
DOMStringMap은 getter, setter, greator 및 deleter와의 인터페이스입니다. 세터에는 DOMString 유형의 이름과 값의 두 매개 변수가 있습니다. 값은 JavaScript 문자열에 직접 맵핑되는 DOMString 유형입니다.
에서 http://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:
JavaScript 문자열의 최대 길이는 구현에 따라 다릅니다.
[참고 : chrome은 bytes.com을 악성 코드의 소스로보고하므로주의하십시오]
답변
SGML은 다음과 같이 65k 문자 제한 세트로 속성을 정의합니다.
http://www.highdots.com/forums/html/length-html-attribute-175546.html
당신이하고있는 일에 대해서는 괜찮을 것입니다. 상한선에 관해서는 jQuery 사용 데이터 속성에 몇 k k의 데이터를 개인적으로 보유하는 것을 보았습니다.