sqzass
English

벤치마크

생성기 다섯, 머신 하나, 코퍼스 하나 — 그리고 정의는 전부 공개

minimal — 제목 하나와 문단 하나

sqzass18 ms Hugo93 ms Zola141 ms Jekyll442 ms Astro4,672 ms

blog — 문단 여섯, 목록, 인용, 링크

sqzass25 ms Hugo112 ms Zola172 ms Jekyll752 ms Astro6,699 ms

heavy·반복 — 페이지마다 동일한 20줄 Rust 블록 5개

sqzass187 ms Hugo3,559 ms Zola5,084 ms Jekyll10,850 ms Astro22,090 ms

heavy·고유 — 페이지마다 전부 다른 20줄 Rust 블록 5개

sqzass1,298 ms Hugo5,912 ms Zola6,789 ms Jekyll11,456 ms Astro23,958 ms

전체 수치

벽시계 시간(콜드 3회 중앙값)과 peak RSS입니다.

minimal blog heavy·반복 heavy·고유
sqzass 0.1.0 18 ms · 15 MB 25 ms · 24 MB 187 ms · 229 MB 1,298 ms · 439 MB
Hugo 0.164.0 93 ms · 123 MB 112 ms · 140 MB 3,559 ms · 411 MB 5,912 ms · 421 MB
Zola 0.22.1 141 ms · 136 MB 172 ms · 142 MB 5,084 ms · 269 MB 6,789 ms · 279 MB
Jekyll 4.4.1 442 ms · 56 MB 752 ms · 62 MB 10,850 ms · 174 MB 11,456 ms · 182 MB
Astro 5.18.2 4,672 ms · 555 MB 6,699 ms · 604 MB 22,090 ms · 2,578 MB 23,958 ms · 2,607 MB

heavy가 둘인 이유

코드 반복도가 순위를 가르는데, 대부분의 벤치마크는 자기 코퍼스의 반복도를 말하지 않기 때문입니다. sqzass는 서로 다른 블록만 빌드에서 한 번씩 구문 강조하므로, 코퍼스 생성기가 같은 블록을 반복해 넣은 코퍼스와 블록이 전부 다른 코퍼스는 서로 다른 측정입니다 — 187 ms와 1,298 ms의 간격이 바로 그 변수입니다. 반복도를 밝히지 않은 단일 "heavy" 수치는 결과를 만든 변수를 숨긴 것입니다.

방법

  • 콜드. 매 회 출력 디렉터리와 도구별 캐시(.jekyll-cache, Astro의 cacheDirdist, Hugo의 resources와 빌드 락)를 지웠습니다. 벽시계 시간과 peak RSS는 GNU time으로 쟀습니다.
  • 코퍼스. 1,000페이지 + 섹션 인덱스. 마크다운 본문은 도구 간에 바이트 단위로 같고 front matter 문법만 다릅니다. 문단은 76자 문장 하나를 네 번 반복한 고정 텍스트입니다.
  • 구문 강조는 다섯 도구 모두 빌드 시점에, 각자 싣는 그대로 켰습니다: syntect+Oniguruma(sqzass), Chroma(Hugo), Giallo(Zola), Rouge(Jekyll), Shiki(Astro). 마크업 세밀도는 도구마다 다릅니다. 같은 heavy 페이지의 span 수는 sqzass 3,205 · Jekyll 1,800 · Zola·Astro 1,700 · Hugo 600. sqzass는 다섯 중 가장 세밀한 마크업을 뽑아내면서도 위의 시간을 기록합니다.
  • 템플릿. 다섯 도구 모두 테마 없는 동일한 최소 레이아웃을 씁니다. 렌더된 본문을 감싸는 HTML 셸 하나입니다.
  • Astro의 시간에는 Node 기동(~1초)이 포함됩니다. Astro는 마크다운→HTML 이상의 일을 하는 컴포넌트 프레임워크이기도 합니다. 그 점은 숨기지 않고 밝혀 둡니다. 다만 코퍼스는 순수 마크다운이고, 이 페이지가 재는 것도 그 워크로드입니다.