SVG 가 왜 그렇게 큰가
아이콘 하나가 20 KB 를 넘는다면 그림이 복잡해서가 아닙니다. 편집기가 자기 상태를 파일 안에 같이 적어 두기 때문입니다. 레이어 이름, 마지막으로 본 확대율, 저장한 시각, 안내선 위치 — 브라우저는 하나도 읽지 않는 값들입니다.
| 지우는 것 | 무엇 |
|---|---|
<metadata> | 제목·저작자·라이선스를 적는 자리. 그림에는 영향이 없습니다 |
inkscape: sodipodi: | 잉크스케이프의 레이어·안내선 정보 |
i: x: graph: | 일러스트레이터가 다시 열 때 쓰는 값 |
sketch: figma: | 스케치·피그마의 원본 레이어 이름 |
| 주석, XML 선언, DOCTYPE | 웹에 올리는 SVG 에는 필요 없습니다 |
| 줄바꿈과 들여쓰기 | 요소 사이의 공백은 렌더에 영향이 없습니다 |
좌표 소수점이 진짜 범인일 때가 많다
편집기는 좌표를 39.500000 처럼 소수점 여섯 자리로 적습니다. 화면에서
1픽셀은커녕 1000분의 1픽셀도 안 되는 차이인데, 좌표 하나마다 다섯 글자씩 늘어납니다.
path 하나에 좌표가 200개면 그것만 1 KB 입니다.
기본값인 소수점 2자리는 아이콘과 로고에 넉넉합니다. 지도처럼 크게
확대해 보는 그림이라면 3자리로 올리세요. 반대로 뷰박스가 0 0 24 24 인
아이콘은 0~1자리로 내려도 눈에 띄지 않습니다.
건드리지 않는 것
공백이 뜻을 갖는 자리가 두 군데 있습니다. 여기는 원문 그대로 흘려보냅니다.
<text><tspan>안 — 공백 하나가 글자 사이 간격입니다<style><script>안 — XML 이 아니라 CSS·자바스크립트입니다. 안쪽 CSS 까지 줄이려면 CSS 압축에 따로 넣으세요
id 도 지우지 않습니다. <use href="#icon"> 나 CSS
선택자, 자바스크립트가 그 이름으로 도형을 찾고 있을 수 있는데, 이 페이지는 SVG 하나만
보고 있어서 쓰이는지 아닌지 알 방법이 없습니다.
<title> 은 왜 기본으로 남기나
스크린리더가 그 값을 읽어 주기 때문입니다. 장식용 아이콘이라면 지워도 되지만, 뜻을 가진 그림(로고, 상태 아이콘, 도표)에서 지우면 화면을 못 보는 사람에게는 그 자리가 통째로 사라집니다. 그래서 이 항목만 기본이 꺼짐입니다.
압축한 SVG 를 다시 편집할 수 있나요?
그림은 그대로 열립니다. 다만 레이어 이름과 안내선은 사라집니다. 편집기에서 계속 작업할 원본은 따로 두고, 웹에 올릴 파일만 압축하세요.
읽기만 하면 되는 거라면 SVG 정렬로 다시 펼칠 수 있습니다. 들여쓰기는 돌아오지만 지워진 값은 돌아오지 않습니다.
CSS 배경으로 쓰려면 어떻게 하나요?
압축한 다음 SVG → CSS 배경에 넣으세요. Base64 로 바꾸는 것보다 URL 인코딩이 더 작고, 색만 바꾸고 싶을 때 손으로 고칠 수도 있습니다.
gzip 을 쓰면 어차피 줄어들지 않나요?
줄어듭니다. 다만 gzip 은 반복되는 글자를 줄일 뿐, 39.500000 을
39.5 로 바꿔 주지는 못합니다. 둘은 겹치지 않고 각각 듣습니다.
압축한 SVG 를 gzip 으로 내보내는 게 가장 작습니다.