이 기사는 웹 페이지 성능을 향상시키기위한 사용자 정의 요소가 게으른로드 방법을 탐색합니다. 이 방법은 동료의 실험에서 영감을 얻었으며, 핵심 아이디어는 사용자 정의 요소를 DOM에 추가 한 후 해당 구현 코드를 자동으로로드하는 것이 었습니다.
일관성을 유지하기 위해 게으른 로더 자체는 HTML을 통해 쉽게 구성 할 수있는 사용자 정의 요소로 설계되었습니다. 먼저, 해결되지 않은 사용자 지정 요소를 점차 식별해야합니다.
요소를 문서에 추가 할 수 있습니다. 이것은 루트 요소를 형성하는 모든 자식 요소에 대한 검색 프로세스를 즉시 시작합니다. 해당 컨테이너 요소에
를 추가하면 조회도의 범위를 문서의 하위 트리로 제한하고 다른 하위 트리에서 여러 인스턴스를 사용할 수도 있습니다.
class AutoLoader extends HTMLElement { connectedCallback() { const scope = this.parentNode; this.discover(scope); } } customElements.define("ce-autoloader", AutoLoader);모든 브라우저가 지원하는 것은 아니며
를 백업 계획으로 사용할 수 있습니다.
<ce-autoloader></ce-autoloader>
<ce-autoloader></ce-autoloader>
메소드를 구현할 수 있으며
discover
의 하드 코드 컨벤션에 주목하십시오. 속성의 URL은 모든 사용자 정의 요소 정의를 포함하는 디렉토리가 있다고 가정합니다 (예 : ). 우리는보다 복잡한 전략을 채택 할 수 있지만 이것은 우리의 목적에 충분합니다. 필요한 경우 프로젝트 별 하위 클래싱을 허용하기 위해이 URL을 별도의 방법으로 위임하십시오.
AutoLoader
어느 쪽이든, 우리는
discover(scope) { const candidates = [scope, ...scope.querySelectorAll("*")]; for (const el of candidates) { const tag = el.localName; if (tag.includes("-") && !customElements.get(tag)) { this.load(tag); } } }
connectedCallback() { const scope = this.parentNode; requestIdleCallback(() => { this.discover(scope); }); }
requestIdleCallback
가 시작되는 곳입니다 : class AutoLoader extends HTMLElement {
connectedCallback() {
const scope = this.parentNode;
this.discover(scope);
}
}
customElements.define("ce-autoloader", AutoLoader);
이런 식으로 브라우저는 DOM에 새 요소가 나타날 때 (보다 정확하게, 해당 하위 트리)를 통지 한 다음이를 사용하여 조회 프로세스를 다시 시작합니다.
위 내용은 게으른 로딩 사용자 지정 요소에 대한 접근의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!