사생활을 건드리지 않고 클릭을 세는 법
이 글의 내용
카운터는 "몇 명이 왔는가"에 답합니다. 더 쓸모 있는 물음은 보통 "몇 명이 무언가를 했는가"입니다 — 연락 링크를 눌렀는지, 내려받기를 열었는지, 소셜 프로필로 나갔는지. 이 사이트에는 그것을 위한 이벤트가 만들어진 때부터 있었습니다. 요소에 data-s4u-event="contact"를 붙이면 그 클릭이 이름으로 세어집니다.
거의 아무도 쓰지 않았습니다. 거의 아무도 몰랐기 때문입니다. 그래서 이제 체크박스가 있습니다. 속성 없이도 링크 클릭을 자동으로 센다는 것입니다. 흥미로운 대목은 그 스위치가 아닙니다. 세어지는 것에 어떤 이름이 붙느냐입니다.
링크 글자가 아니라
클릭에 붙일 뻔한 이름은 방문자가 누른 낱말입니다. 그리고 그것은 잘못된 이름입니다.
링크 글자는 자유로운 내용입니다. 링크에는 "주문 4711"이라고 적힐 수도, "안나에게서 온 메시지"라고 적힐 수도, 집 번호나 예약 번호나 전자우편 주소가 담길 수도 있습니다. 그 모두가 name라는 이름의 데이터베이스 칸에 들어가 그대로 앉아 있게 됩니다. 이 서비스의 개인정보 처리방침은 통계에 개인정보가 담기지 않는다고 적고 있고, 그것은 어느 사이트 주인이 앵커 태그 안에 무엇을 쓰든 상관없이 참이어야 합니다.
두 번째 문제도 있습니다. 더 작지만 실재합니다. 한 페이지에 "여기"라고 적힌 링크 스무 개는 아무 말도 하지 않는 이름 하나이고, 같은 링크의 열한 개 번역은 카운터에 허용된 쉰 개 이름 가운데 열한 개를 차지합니다.
그래서 이름은 목적지 경로에서 옵니다. 사이트 주인이 골랐고, 고정되어 있고, 이미 페이지 통계가 쓰는 열쇠입니다.
정규화 셋, 저마다 까닭과 함께
- 언어 접두사를 뗍니다.
/de/blog와/pl/blog는 같은 페이지입니다. 이것이 없으면 다국어 사이트 하나의 언어 전환기만으로 쉰 개 이름 가운데 열한 개가 사라집니다. - 다섯 자리 이상의 숫자 연속은
n이 됩니다. 카운터 번호가 다른 두 통계 페이지는 두 페이지가 아니라 같은 페이지 두 번입니다. - 사이트를 떠나는 링크는
ex-에 호스트를 붙인 것이 됩니다. 남의 페이지 경로는 주인에게 아무것도 말해 주지 않습니다. 클릭이 어디로 갔는지는 말해 줍니다.
앵커, mailto:, tel:, javascript:는 건너뜁니다 — 누구도 수를 셀 필요가 없는 목적지이기 때문입니다. 이미 자기 이벤트 이름을 지닌 요소도 건너뜁니다. 그러지 않으면 같은 클릭이 두 번 세어집니다.
값은 얼마인가
브라우저 스크립트가 압축 기준 1,022바이트 늘었고, 첫 방문에 한 번입니다. 그 밖에는 없습니다. 표시는 스크립트가 어차피 페이지마다 하는 요청에 얹혀 갑니다 — 지금까지 늘 같은 상수를 돌려주던 요청입니다 — 그래서 두 번째 왕복이 없습니다. 서버에서는 스위치가 켜진 카운터 목록이 조회가 아니라 작은 파일에 있습니다. 그 조회는 166,433줄을 전부 훑는 일이고 잰 값으로 143.9밀리초가 들기 때문입니다.
기본값은 꺼짐이고, 꺼진 채로 둡니다. 이 사이트의 규모에서 모든 곳에 켜면 가장 바쁜 표에 하루 약 구천 번의 쓰기가 더해집니다. 그것은 주인이 일부러 켜는 것이지, 사이트에 저절로 일어나는 일이 아닙니다.