
async나 defer가 없는 외부 스크립트)는 파서 차단(Parser-blocking) 방식입니다. 이는 스크립트가 파싱되고 평가될 때까지 HTML 파서가 그 아래의 내용을 읽지 못하도록 차단됨을 의미하며, 따라서 아래의 어떤 내용도 페인트될 수 없습니다.<my-component>레이아웃 측정이 필요합니다</my-component><script> class MyComponent extends HTMLElement { // ... } customElements.define("my-component", MyComponent);</script><script> class MyComponent extends HTMLElement { constructor() { super(); const inner = this.querySelector('.inner'); // 너무 빠릅니다. console.log('constructor', { inner }); } connectedCallback() { const inner = this.querySelector('.inner'); // 여전히 너무 빠릅니다. 자식 요소들이 파싱되어 // DOM에 부착되기 전에 엘리먼트가 연결되기 때문입니다. console.log('connectedCallback', { inner }); } } customElements.define("my-component", MyComponent);</script><my-component> <span class="inner">Thing</span></my-component><script> class MyComponent extends HTMLElement { constructor() { super(); const inner = this.querySelector('.inner'); // 작동합니다. console.log('constructor', { inner }); } connectedCallback() { const inner = this.querySelector('.inner'); // 역시 작동합니다. console.log('connectedCallback', { inner }); } }</script><my-component> <span class="inner">Thing</span></my-component><script> customElements.define("my-component", MyComponent);</script>my-component가 기본 상태로 렌더링되지 않을 것이라고 보장할 수는 없습니다.blocking="render"<script>,<style>또는 스타일시트<link>에 'blocking=render'를 속성과 값으로 추가하여 명시적으로 렌더링을 차단할 수 있게 합니다. 주요 용도는 스크립트로 삽입된 스크립트/스타일시트, 클라이언트 측 A/B 테스팅 등으로 인해 발생하는 스타일이 적용되지 않은 콘텐츠의 플래시나 미완성된 페이지와의 사용자 상호작용을 방지하는 것입니다. — Chrome Platform Status
<my-component> <span class="inner">Thing</span></my-component><script blocking="render"> class MyComponent extends HTMLElement { // ... } customElements.define("my-component", MyComponent);</script>type="module"과도 함께 작동합니다. (전역 네임스페이스를 오염시킬 필요가 없습니다.)<script type="module" blocking="render"> class MyComponent extends HTMLElement { // ... } customElements.define("my-component", MyComponent);</script><script type="module" blocking="render" src="/js/my-component.js"></script>
아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!

accept 속성이 파일 업로드 UX를 저하시키는 이유
Inkyu Oh • UI/UX
tsgo는 왜 그렇게 많은 메모리를 사용하나요?
Inkyu Oh • Front-End