플러그인 0개 워드프레스에서 글 한 편이 불러오는 파일 13개, 519KB를 뜯어 보면

플러그인 0개 워드프레스에서 글 한 편이 불러오는 파일 13개, 519KB를 뜯어 보면

워드프레스가 무겁다는 말을 들으면 보통 플러그인을 의심합니다. 그러면 플러그인이 하나도 없는 사이트는 얼마나 가벼울까요. 이 블로그가 그 조건입니다. 활성 플러그인 0개, 테마는 Kadence 하나입니다. 글 한 편을 열 때 브라우저가 받는 파일을 전부 세어 봤습니다. HTML 하나에 CSS 8개, JS 5개, 인라인 스타일 6개였고, 압축 전 기준으로 520KB였습니다. 그리고 그 절반 가까이는 워드프레스도 테마도 아닌 곳에서 왔습니다.

어떻게 세었는가

브라우저 개발자 도구를 열면 요청 목록이 나오지만, 이미지와 광고가 뒤늦게 끼어들어 기준이 흔들립니다. 그래서 서버에서 페이지 HTML을 받아 <link rel="stylesheet"><script src>를 추출하고, 각 파일을 다시 받아 크기를 쟀습니다. <style><script> 안에 직접 박힌 인라인 코드도 따로 합쳤습니다. 이미지는 제외했습니다. 글마다 달라서 비교 기준이 되지 않기 때문입니다.

대상은 두 페이지입니다. 메인 화면과 가장 최근 글 한 편입니다. 수치는 모두 gzip 압축 전 원본 크기입니다. 실제 전송량은 이보다 작지만, 무엇이 무거운지 비교하는 데는 압축 전 값이 더 정직합니다.

글 한 편에 파일 13개, 520KB

먼저 글 한 편의 결과입니다.

구분 파일 수 크기 비중
외부 JS (광고 스크립트) 1개 201.9KB 38.9%
테마 CSS 8개 121.2KB 23.3%
HTML 문서 1개 101.3KB 19.5%
테마 JS 3개 53.8KB 10.4%
인라인 <style> 6개 30.8KB 5.9%
인라인 <script> 8개 6.3KB 1.2%
코어 JS 1개 3.0KB 0.6%
글 한 편이 불러오는 파일 구성 막대그래프. 광고 JS 201.9KB, 테마 CSS 121.2KB, HTML 101.3KB, 테마 JS 53.8KB
광고 스크립트 하나가 워드프레스와 테마의 모든 CSS·JS를 합친 것과 맞먹습니다.

합계 519KB입니다. 가장 큰 덩어리는 애드센스 스크립트 하나로 201.9KB입니다. 워드프레스 코어와 테마가 만든 모든 CSS·JS·인라인 코드를 다 합친 215KB와 거의 같습니다. 플러그인을 0개로 유지해도 광고 하나를 붙이는 순간 페이지 무게가 두 배가 됩니다.

코어가 직접 내보낸 외부 JS 파일은 comment-reply.min.js 3.0KB 하나뿐이었습니다. jQuery는 불려 나가지 않았습니다. 테마가 jQuery 없이 만들어졌고 플러그인이 없으니 아무도 요청하지 않은 것입니다. 플러그인 하나만 들어와도 이 자리에 jQuery 30KB가 다시 붙는 경우가 많습니다.

테마 CSS 8개 중 4개는 1~9KB

CSS 8개를 크기순으로 늘어놓으면 이렇습니다.

파일 크기 메인에서도 불림
content.min.css 33.6KB
global.min.css 27.4KB
header.min.css 24.7KB
footer.min.css 19.5KB
kadence-splide.min.css 9.0KB 아니오
comments.min.css 4.9KB 아니오
author-box.min.css 1.3KB 아니오
related-posts.min.css 1.0KB 아니오

메인 화면은 앞의 4개만 씁니다. 글 페이지에서 추가되는 4개는 댓글, 작성자 상자, 관련 글 같은 글 페이지에만 있는 부품의 스타일입니다. 테마가 화면에 따라 필요한 것만 붙이는 구조라는 뜻입니다. 이 4개를 합쳐도 16KB이니 파일 수는 늘었지만 무게는 크게 늘지 않았습니다.

JS도 같은 패턴입니다. 메인에서는 navigation.min.js 21.9KB 하나인데, 글 페이지에서는 관련 글 슬라이더용 splide.min.js 29.1KB와 초기화 코드 2.9KB가 더 붙습니다. 글 한 편에서 추가되는 JS 32KB가 전부 관련 글 슬라이더 몫입니다. 슬라이더를 끄고 목록으로 바꾸면 그대로 사라지는 무게입니다.

HTML 101KB의 정체

표에서 눈에 걸리는 것이 HTML 크기입니다. 글 본문은 4,400자 정도인데 문서는 101KB입니다. 메인 화면도 100KB였습니다. 본문 길이와 무관하게 100KB가 나온다는 것은 본문이 아니라 틀이 무겁다는 뜻입니다.

안을 들여다보니 인라인 <style> 30.8KB가 HTML 안에 들어 있었습니다. 그중 큰 것 세 가지입니다.

id 크기 누가 넣나
global-styles-inline-css 14.5KB 워드프레스 코어 (theme.json)
kadence-global-inline-css 11.9KB 테마 (사용자 설정값)
wp-block-library-inline-css 3.6KB 워드프레스 코어 (블록)

global-styles-inline-css는 워드프레스가 theme.json의 색상·글꼴·간격 설정을 CSS 변수로 풀어 매 페이지 HTML에 직접 써넣는 것입니다. 파일로 나가면 한 번 받고 캐시될 텐데, 인라인이라 페이지마다 14.5KB씩 다시 옵니다. 테마 설정값 11.9KB도 같은 방식입니다. 둘을 합쳐 26KB가 캐시되지 않는 무게로 매번 실려 갑니다.

나머지 70KB는 헤더와 푸터의 메뉴, SVG 아이콘, 관련 글 목록, 댓글 폼 같은 구조입니다. 이 부분은 두 페이지가 거의 같았습니다. 그래서 본문이 짧은 글이든 긴 글이든 HTML은 100KB 근처에서 움직입니다.

이모지 스크립트는 남아 있다

인라인 <script> 8개 중에는 wp-emoji 감지 코드가 들어 있고, 스타일에도 wp-emoji-styles-inline-css 0.3KB가 있습니다. 크기는 작지만 이 사이트에서 이모지를 쓴 글은 한 편도 없습니다. 코어가 기본으로 넣는 것이라 플러그인이 없어도 남습니다. 끄려면 print_emoji_detection_scriptprint_emoji_styles 훅을 떼야 하는데, 얻는 것이 1KB 남짓이라 손댈 가치는 판단이 갈립니다.

없는 것도 세어 봤다

있는 것만큼 없는 것도 확인했습니다. preload 0개, preconnect·dns-prefetch 0개, @font-face 0개입니다.

폰트 0개는 의도한 결과입니다. 시스템 글꼴만 쓰도록 테마를 설정했기 때문에 웹폰트 파일이 하나도 내려가지 않습니다. 한글 웹폰트는 한 벌에 수백 KB이니, 이 사이트에서 가장 큰 절약이 이 항목입니다. 광고 스크립트 201KB보다 큰 파일이 여기서 빠졌습니다.

preconnect 0개는 반대로 빠진 것입니다. 광고 스크립트가 pagead2.googlesyndication.com에서 오는데, 그 도메인에 미리 연결하라는 힌트가 없습니다. 브라우저는 스크립트 태그를 만난 뒤에야 DNS 조회와 TLS 연결을 시작합니다. 한 줄이면 되는 일인데 기본으로는 들어 있지 않습니다.

정리하면

플러그인 0개 사이트에서 글 한 편은 파일 13개, 압축 전 519KB였습니다. 그중 워드프레스와 테마의 몫은 215KB이고, 광고 스크립트 하나가 202KB, HTML 자체가 101KB입니다. 가볍게 만든 사이트에서도 무게의 40%는 사이트 밖에서 온다는 것이 이번 측정의 결론입니다.

그래서 페이지 무게를 줄일 때는 플러그인 목록보다 먼저 볼 곳이 있습니다. 외부 스크립트가 몇 개인지, 인라인 스타일이 캐시 없이 매번 얼마나 실리는지, 웹폰트가 있는지입니다. 이 셋을 확인한 뒤에 플러그인을 봐도 늦지 않습니다.

직접 세어 보는 방법

같은 측정은 서버에서 한 줄로 시작할 수 있습니다. 페이지를 받아 스타일시트와 스크립트 주소만 뽑는 명령입니다.

curl -s https://example.com/ 
  | grep -oE '(href|src)="[^"]+.(css|js)[^"]*"' 
  | sort -u

나온 주소를 하나씩 받아 크기를 재면 이 글의 표가 됩니다. 인라인 코드 크기는 <style></style> 사이를 잘라 세면 됩니다. 어느 파일이 가장 큰지는 열 개만 세어 봐도 바로 드러납니다.

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다