그간 미루어 왔던 HTML 스펙문서를 읽고 정리해 보았다.
영어실력도 기를 겸 영어문서를 내가 이해한 방식으로 정리도 함께 해보려고 한다.
1.7 Design notes
HTML 을 처음 볼때 비합리적이고 일관성이 없어보인다. 많은 DOM API 를 서포팅하는 HTML 은 수십년 동안 많은 케이스 중에서 서로의 존재를 몰랐던 많은 사람들은 다양한 우선순위를 가지고 발전해왔다.
HTML 의 기능들은 많은 소스들에 의해 만들어졌고, 항상 일관성있게 고안되지는 않았다.
게다가 implementation 된 버그가 사실상(de-facto) 표준이 되었고, 이제는 법적(de-jure) 표준이 되었다.
버그가 수정되기 전에 종종 콘텐츠가 그 버그에 의존하는 방식으로 작성되기 때문이다.
그럼에도 불구하고 design goal 을 준수하기 위해 많은 노력이 있었다.
It must be admitted that many aspects of HTML appear at first glance to be nonsensical and inconsistent.
HTML, its supporting DOM APIs, as well as many of its supporting technologies, have been developed over a period of several decades by a wide array of people with different priorities who, in many cases, did not know of each other's existence.
Features have thus arisen from many sources, and have not always been designed in especially consistent ways. Furthermore, because of the unique characteristics of the web, implementation bugs have often become de-facto, and now de-jure, standards, as content is often unintentionally written in ways that rely on them before they can be fixed.
Despite all this, efforts have been made to adhere to certain design goals. These are described in the next few subsections.
1.7.1 Serializability of script execution
스크립트는 동기적 순차적 실행이 된다. 워커가 있어도 말이다.
워커 스레드는 병렬 처리를 위해 백그라운드에서 작업을 수행하는 스레드의 개념이다.
웹 워커는 싱글스레드인 자바스크립트가 백그라운드에서도 돌수 있도록 실행해주는 api 이다.
하지만 sharedArrayBuffer 라는 클래스는 예외이다. 다른 에이전트의 스크립트가 병렬적으로 실행되는지 감시가 가능하다. 자바스크립트 메모리 모델 때문에, 동기적으로 풀어낼 수 없는 복잡한 상황들도 존재한다.
To avoid exposing web authors to the complexities of multithreading, the HTML and DOM APIs are designed such that no script can ever detect the simultaneous execution of other scripts.
Even with workers, the intent is that the behavior of implementations can be thought of as completely serializing the execution of all scripts in all globals.
The exception to this general design principle is the JavaScript SharedArrayBuffer class. Using SharedArrayBuffer objects, it can in fact be observed that scripts in other agents are executing simultaneously. Furthermore, due to the JavaScript memory model, there are situations which not only are un-representable via serialized script execution, but also un-representable via serialized statement execution among those scripts.
1.7.3 Extensibility
HTML 은 안전한 방식으로 의미을 추가하는 extensibility mechanisms 의 범주가 넓다.
작성자는 기존의 html 요소들을 이용해서 class 속성을 사용해서 커스텀 elements 를 만들 수 있다.
그래서 다른 브라우저나 툴들이 extension 을 몰라도 여전히 서포트할 수 있게 되었다.
마이크로 포맷에 의해 사용되는 예를 들어보겠다.
** 마이크로 포맷 : class, rel, rev 와 같이 HTML의 부족한 정보 전달성을 보완하고자 개발된 규칙적인 방법론
-
data-*="" 속성을 사용하면
client-side 의 인라인 스크립트나 server-side 전체 스크립트 안에 데이터를 포함할 수 있다.
이 속성을 사용하면 브라우저가 건드릴 수 없게 되고
HTML elements 데이터를 스크립트에 포함시킬 수 있다. 그러면 스크립트는 요놈을 찾아 실행하게 된다.
-
<meta name="" content=""> 를 사용해서 페이지 전반의 메타 데이터를 포함할 수 있다.
-
rel="" 속성에는 이미 정의되어 있는 링크 타입들의 확장자들을 등록하여
구체적인 의미를 가진 링크의 주석을 넣을 수 있다.
-
<script type=""> 를 사용해 커스텀 타입을 raw data 에 넣을 수 있다.
-
자바 스크립트 프로토 타이핑을 사용해 api 를 확장할 수 있다. 예를 들면 스크립트 라이브러리에 의해 널리 사용되어 진다.
-
유저는 다른 어플리케이션이나 사이트와 공유할 수 있도록 itemscope="" and itemprop="" 와 같은 마이크로데이터 feature 를 사용해서 nested-name-value pairs of data 에 넣을 수 있다.
-
HTML 문법을 확장하여 커스텀 엘레멘츠를 정의하고, 공유, 사용할 수 있다.
유효한 커스텀 요소 이름의 요구 사항은 앞으로 HTML, SVG, 또는 MathML에 하이픈(-)이 포함된 로컬 이름을 가진 요소가 추가되지 않도록 하여, 미래의 호환성을 보장한다
HTML has a wide array of extensibility mechanisms that can be used for adding semantics in a safe manner:
Authors can use the class attribute to extend elements, effectively creating their own elements, while using the most applicable existing "real" HTML element, so that browsers and other tools that don't know of the extension can still support it somewhat well.
This is the tack used by microformats, for example.
Authors can include data for inline client-side scripts or server-side site-wide scripts to process using the data-*="" attributes. These are guaranteed to never be touched by browsers, and allow scripts to include data on HTML elements that scripts can then look for and process.
Authors can use the <meta name="" content=""> mechanism to include page-wide metadata.
Authors can use the rel="" mechanism to annotate links with specific meanings by registering extensions to the predefined set of link types. This is also used by microformats.
Authors can embed raw data using the <script type=""> mechanism with a custom type, for further handling by inline or server-side scripts.Authors can extend APIs using the JavaScript prototyping mechanism. This is widely used by script libraries, for instance.
Authors can use the microdata feature (the itemscope="" and itemprop="" attributes) to embed nested name-value pairs of data to be shared with other applications and sites.
Authors can define, share, and use custom elements to extend the vocabulary of HTML. The requirements of valid custom element names ensure forward compatibility (since no elements will be added to HTML, SVG, or MathML with hyphen-containing local names in the future).
'JavaScript' 카테고리의 다른 글
Network - Cache 그리고 Cache-Control (5) | 2024.11.14 |
---|---|
CSS - Scss vs Css in Js 동작방식 비교하기 (0) | 2024.08.04 |
JavaScript - async / defer 스크립트 속성 (feat. kakao sdk 로컬 에러) (0) | 2024.07.15 |
알고리즘 - 퀵 정렬(Quick Sort) (0) | 2024.06.09 |
알고리즘 - 이진 탐색 (0) | 2024.05.19 |
댓글