에루샤
erusya
Back-end Developer
Web Geek
Anime Otaku
에루샤 프로필 이미지
개발

퍼사드로 유튜브 지연 로딩 처리

52 views as of December 30, 2024.

유튜브 초기 로딩 느림

우연히 내 블로그 사이트를 뒤적거리다가 유튜브로 올린 페이지에서 페이지 로딩 시간이 오래걸려 컨텐츠가 느리게 뜬다는 구글 서치콘솔의 보고서를 받게되었다.

무슨내용인가하니 유튜브 영상을 내 페이지에 넣었더니 최초에 유튜브로부터 가져오는 iframe 등의 정보량때문에 내 페이지 랜더링이 늦어진다는 의미였다.

관련내용을 알아보니 퍼사드를 사용해서 서드 파티 리소스에 지연로딩을 걸라고한다.


퍼사드

나는 라라벨 퍼사드만 알고있었는데, 웹 최적화 용어에서도 퍼사드라는 용어를 쓰고있었다.
이쪽에서 말하는 퍼사드는 삽입된 서드 파티와 유사하게 보이지만 작동하지 않으므로 페이지 로드 시 부담이 훨씬 적은 정적 요소라고 한다.

쉽게말해 플레이스 홀더의 개념이지만 서드 파티 리소스를 가져올때 이를 지연로딩 하는 기술과 더불어 원래 서드 파티 리소스가 보여주어야할 페이지의 형태를 더욱 직접적으로 띄는 그런 형태를 말하는것 같다.

본문 이미지구글 크롬 개발자 커뮤니티 설명

쉽게 말해 사용자의 인터렉션이 있기가지는 그냥 실행 트리거를 기다리는 스크립트만 담은 요소이며, 이 요소는 용량 최적화가 되어있어서 초기 로딩에 영향을 주지않는다.
그리고 사용자의 인터렉션이 있으면 그때 서드 파티 리소스를 가져와 화면에 랜더링 해주는 것이다.

우리가 흡사 아는 비동기 작업, 지연 로딩과 매우 비슷한 기능이다.

말그대로 여러 서드 파티에 적용 가능한 통념적인 단어이고, 여기서는 유튜브 iframe 지연 로딩을 위한 내용을 주로 다뤄보고자 한다.


@justinribeiro/lite-youtube

깃헙에서 가장 많이 사용되는 유튜브 퍼사드 프로젝트이다.

GitHub - justinribeiro/lite-youtube: The fastest little YouTube web component on this side of the internet. The shadow dom web component version of Paul's lite-youtube-embed.
GitHub - justinribeiro/lite-youtube: The fastest little YouTube web component on this side of the internet. The shadow dom web component version of Paul's lite-youtube-embed.
The fastest little YouTube web component on this side of the internet. The shadow dom web component version of Paul's lite-youtube-embed. - justinribeiro/lite-youtube
https://github.com/justinribeiro/lite-youtube

간단하게 스크립트 로딩하는 한줄로만으로도 충분히 작동하며 위의 퍼사드로써의 역할을 충분히 수행해내는 라이브러리이다.

적용하는 방법은, 외부 스크립트 로딩방식으로 사용하려면 아래와 같이 간단하게 쓸 수 있다.

<script type="module" src="https://cdn.jsdelivr.net/npm/@justinribeiro/lite-youtube@1/lite-youtube.min.js"></script>Copy


만약에 npm 방식으로 로컬에 올려두고 사용하고 싶다면 아래와 같은 설치 명령어로 설치할 수 있다.

npm i @justinribeiro/lite-youtubeCopy


일반 노드 프로젝트의 경우에 스크립트를 아래와 같이 로드하면되고,

import '@justinribeiro/lite-youtube';Copy


만약에 라라벨 웹팩을 사용하고있다면 resources/js/bootstrap.js 파일을 열어 이미 선언되어있는 try 문 안에 아래와 같이 로드 시키면된다.

require('@justinribeiro/lite-youtube')Copy


그리고 유튜브를 넣을 곳에 아래와 같은 태그로 내용을 기입하면된다.

<lite-youtube videoid="rYa_4AnsKis"></lite-youtube>Copy


실제로 위의 코드도 lite-youtube 태그로 넣어서 퍼사드로 구현한 embed 이다.
흡사 유튜브 재생용 iframe 같지만 실제로는 그렇지 않다.


성능 비교

단순히 브라우저에서 로딩속도만 가지고 비교할 수는 없지만 아래와 같이 유의미한 로딩 차이가 있다.

본문 이미지유튜브 iframe 방식
본문 이미지lite-youtube 퍼사드 방식

기존에 전체 랜더링 및 스크립트 처리가 끝날때까지 4초정도 걸리던 런타임이 3초정도로 줄어들었다.
실제로 cpu 연산량/버스트수준도 최대 피크 88%에서 64%로 줄어들었다.

페이지 접근속도도 유의미하게 빨라졌고 정말 나쁘지않은듯하다.

#JavaScript #문제해결
0 개의 댓글
×