오피뷰 성능 최적화: 캐시와 로딩 속도 팁
오피사이트를 운영하다 보면, 기능을 더할수록 페이지가 무거워지고 체감 속도가 떨어진다. 메인 페이지에서 이미지가 많은 카드형 레이아웃을 쓰고, 사용자 리뷰와 지역 필터, 지도로 확장하는 순간 성능 문제가 겉으로 드러난다. 오피뷰처럼 콘텐츠 규모가 커지고, 사용자 유입이 분 단위 스파이크를 보일 때는 작은 지연도 이탈률과 광고 수익에 바로 반영된다. 결국 핵심은 두 가지다. 캐시 전략을 치밀하게 설계해서 서버와 네트워크 병목을 줄이고, 로딩 경로를 정리해 사용자가 먼저 보는 영역을 빠르게 완성하는 것. 여기에 이미지, 폰트, 스크립트에 대한 세부 최적화가 더해지면, 체감 품질이 눈에 띄게 달라진다.
아래 내용은 실제 오피뷰와 유사한 구조의 서비스에서 반복해 검증한 실무 팁들이다. 단일 정답은 없다. 다만 트래픽 특성과 배포 파이프라인, 데이터 갱신 주기를 고려해 원칙과 우선순위를 세우면, 복잡한 선택지에서도 흔들리지 않는다.
무엇을 먼저 빠르게 만들 것인가
사용자가 첫 화면에서 느끼는 속도는 TTFB, LCP, FID 같은 수치로 설명되지만, 현장에서 목적은 단순하다. 접속 후 1초 내에 핵심 콘텐츠의 뼈대를 보여주고, 2초 내에 주된 이미지가 나타나며, 3초 안에 상호작용이 가능하게 만드는 것. 모든 리소스를 동시에 최적화할 수 없다. 그래서 페이지 단위가 아니라 뷰포트 상단의 핵심 블록을 기준으로 삼는다. 예를 들어 오피사이트의 지역별 인기 리스트가 주력이라면, 그 영역의 HTML과 스타일, 대표 이미지가 최우선이다. 지도나 후기처럼 뒤늦게 읽어도 되는 블록은 초기에 비우고 스켈레톤으로 대체한다.
이렇게 먼저 보여줄 것을 정하면, 캐시 계층을 어디에 놓을지, 어떤 리소스를 프리로드할지, 어떤 스크립트를 지연시킬지가 자연스럽게 결정된다. 욕심을 버리고 위에 있는 것부터 빠르게, 아래는 천천히. 이 단순한 원칙이 체감 속도를 바꾼다.
캐시 전략의 뼈대: 계층, 유효기간, 무효화
캐시는 결국 트레이드오프의 연속이다. 너무 오래 들고 있으면 신선도가 떨어지고, 너무 짧으면 캐시 적중률이 낮아진다. 계층을 나누고, 데이터 성격에 맞춰 유효기간과 무효화 방식을 분리하는 것이 시작점이다.
첫째, 클라이언트와 CDN, 오리진 서버, 데이터베이스 캐시를 서로 다른 목적에 맞춰 구성한다. 이미지와 정적 자산은 CDN에서 오래 캐시한다. HTML은 사용자 맞춤 여부에 따라 나눈다. 완전한 퍼스널라이즈가 없다면, 경로와 쿼리 조합을 키로 삼아 CDN에서 캐시하고, 달라지는 일부 블록은 클라이언트에서 비동기로 채운다. 맞춤 요소가 필요하다면 HTML은 짧게 또는 아예 캐시하지 않고, 에지에서 서버사이드 렌더링과 블록별 캐시를 섞는다.
둘째, 유효기간을 데이터 생명주기와 묶는다. 지역별 인기 리스트가 10분 주기로 변한다면, CDN의 cache-control s-maxage를 600초로 두고, 브라우저에는 60초 정도의 단기 캐시를 부여한다. 반면 업로드된 이미지나 폰트 파일은 해시 기반 파일명으로 영구 캐시 가능하다. 서비스 배포 때마다 해시가 바뀌니, 무효화는 자동으로 이뤄진다.
셋째, 무효화는 이벤트 중심으로. 운영자가 특정 매장의 정보를 수정하면, 해당 상세 페이지와 그 매장이 노출되는 목록 페이지 키를 모아 에지에서 purge 한다. 캐시 키 체계를 처음부터 설계해두면, 운영툴에서 바뀐 대상과 연관된 경로를 추적하기 쉽다. 트래픽이 크면 전체 퍼지 대신 태그 기반 무효화가 유용하다. 예를 들어 매장 ID를 태그로 붙여, 동일 ID가 포함된 캐시 엔트리를 한 번에 지운다.
TTFB를 줄이는 서버 렌더링 실무 팁
TTFB가 커지는 이유는 세 가지에서 생긴다. 오리진과의 물리적 거리, 서버가 페이지를 그릴 때 DB와 외부 API를 기다리는 시간, 그리고 템플릿 렌더링 자체의 비용. 첫 번째는 에지에서 렌더링하거나 CDN 캐시로 상쇄한다. 두 번째와 세 번째는 코드와 쿼리 구조를 손봐야 한다.
오피뷰처럼 리스트형 페이지가 크면 N+1 쿼리 패턴이 자주 등장한다. 목록을 가져오고, 각 항목의 평점이나 썸네일을 별도 쿼리로 불러오는 식이다. ORM을 쓰면 더 잘 숨겨진다. 이는 페이지가 커질수록 선형적으로 느려진다. 해결책은 조인과 프리로드, 집계 테이블이다. 예를 들어 일일 평점 평균은 실시간 계산 대신 집계 테이블로 5분 간격 업데이트로 바꾸고, 리스트에는 이 집계 값을 붙인다. 썸네일 URL은 조인으로 한 번에 끌어온다. 서버 렌더링 시에는 템플릿 엔진에서 반복 렌더링을 최소화하고, HTML 조각을 스트리밍해 상단 접두부를 먼저 보낸다. 스트리밍은 사용자 단에서 첫 페인트가 빨라지고, 느린 블록이 뒤에 있어도 지연을 숨길 수 있다.
서버리스나 에지 런타임을 쓸 때는 콜드 스타트 영향을 수치로 확인해야 한다. 트래픽이 들쑥날쑥하면 새벽 시간의 콜드 스타트가 200~400ms 추가되기도 한다. 핫스타트를 유지하기 위해 헬스체크 빈도를 조정하거나, 특정 경로만 에지에서 렌더링하고 나머지는 캐시에 의존하는 하이브리드 구성이 실용적이다.
HTML, CSS, JS의 적정선
프론트 자산은 줄이는 것이 선. 하지만 무작정 축소하면 유지보수가 힘들고, 프레임워크 업데이트 때 성능이 역행하기도 한다. 현실적으로는 커버리지와 가시성 기준으로 줄인다.
HTML은 서버에서 불필요한 주석과 공백을 제거하되, 접근성 속성은 남긴다. aria-label이나 alt가 빠지면 이미지 대체 텍스트 지연 로딩 시 스크린리더 사용자가 불편해진다. CSS는 크리티컬 CSS를 추출해 above-the-fold 스타일만 인라인으로 넣고, 나머지는 지연 로드한다. 크리티컬 범위는 과하게 잡지 않는다. 헤더, 네비게이션, 첫 섹션 정도로 10~14KB Gzip 내로 유지하는 편이 안정적이다. 프레임워크가 자동 추출을 제공한다면 결과 CSS가 실제 뷰포트와 맞는지 항상 눈으로 확인한다. 종종 모듈 경계가 넓게 잡혀 초기에 100KB가 넘는 경우가 있다.
자바스크립트는 세 가지 원칙이 안전하다. 첫째, 렌더에 꼭 필요한 모듈만 초기 번들에 포함한다. 지도, 차트, 에디터 같은 무거운 라이브러리는 라우트 기반 코드 스플리팅으로 뒤로 미른다. 둘째, hydration 비용을 줄인다. 리스트 아이템이 수백 개면 전부를 인터랙티브 컴포넌트로 만들 필요가 없다. 클릭이나 호버가 필요한 요소에만 이벤트 위임을 쓰고, 나머지는 순수 HTML로 둔다. 셋째, 제3자 스크립트는 샌드박스와 지연 로딩. 광고, 분석 태그는 종종 LCP를 망가뜨린다. async, defer는 기본이며, 퍼포먼스 API로 블록킹을 일으키는 리소스를 잡아내서 로딩 순서를 조정한다.
이미지: 체감 속도의 절반
오피사이트는 이미지가 성능의 절반을 결정한다. 썸네일부터 배너, 상세 이미지까지 수백 장이 한 페이지에 모일 수 있다. 압축, 포맷, 사이즈, 로딩 방식이 모두 중요하다.
포맷은 AVIF와 WebP를 우선으로 하고, 호환성 이슈가 있는 오래된 브라우저에는 JPEG를 폴백으로 제공한다. 서버 단에서는 원본 업로드 시 해상도와 비율을 검증한다. 가로 800픽셀 영역에 3000픽셀 이미지를 넣는 실수는 생각보다 흔하다. 리사이즈 파이프라인에서 동일 비율로 1x, 2x 세트를 만들고, srcset과 sizes를 정확히 선언한다. sizes를 잘못 쓰면 브라우저가 과도한 해상도를 내려받는다. 실제 운영에서 sizes를 합리적으로 잡았을 때 평균 이미지 전송량이 25~40% 줄었다.
썸네일은 지연 로딩이 기본이지만, 첫 화면에 보이는 4~6개는 preload로 미리 힌트를 준다. LCP 후보 이미지라면 as=image와 fetchpriority=high를 함께 사용하면 효과가 크다. Placeholder는 고민이 필요한 영역이다. 블러 처리된 저해상도 프리뷰는 보기 좋지만, CSS 블러 필터가 과도하면 페인트 비용이 늘어난다. 미리 블러 처리한 LQIP 이미지를 전달하거나, 단색 배경에 스켈레톤을 두는 방법이 더 가볍다. 캐시는 파일명 해시를 사용해 최대치로 오래 유지하고, 변환 서버는 CDN과 가까운 리전에서 운영해 첫 요청 지연을 낮춘다.
폰트와 텍스트 렌더링의 미세 조정
폰트는 눈에 잘 안 보이는 병목이다. 웹폰트 한 세트가 100KB를 넘기 쉬우며, woff2라도 렌더 블록이 된다. 오피뷰처럼 한글 텍스트가 많은 서비스는 부분 서브셋팅과 폴백 전략이 강력하다. 초기에 필요한 문자 범위를 헤더, 네비게이션, 카드 타이틀 기준으로 추출해 첫 로딩 전용 서브셋을 만든다. 나머지는 지연 로딩한다. font-display는 swap이 안전하지만, 초기에 깜빡임을 최소화하려면 폴백 폰트의 메트릭을 커스텀 CSS로 조정한다. line-height와 글자폭 차이가 크면 레이아웃 시프트가 생긴다.
프리로드는 필요한 폰트 파일만 지정한다. 다크모드에서만 쓰는 폰트 가중치까지 모두 프리로드하는 실수를 피한다. 실제로 헤더에 preload를 과도하게 넣으면 브라우저의 네트워크 슬롯을 잡아먹어 이미지 로딩이 늦어진다. 가장 눈에 띄는 텍스트 영역 하나에 집중하자.
CDN 활용: 캐시만이 아니라 라우팅과 이미지 처리까지
CDN은 단순 캐시 박스에서 에지 컴퓨팅 플랫폼으로 진화했다. 오피사이트 트래픽은 지역 편중이 크고, 피크 시간이 겹친다. 라우팅을 CDN에서 최적화하면 병목을 크게 줄인다. 예를 들어 서울, 부산, 도쿄 리전에 에지 노드를 두고, 한국 이용자는 서울, 서일본 지역은 도쿄로, 장애 시에는 부산으로 페일오버한다. 헬스체크 주기는 10초 내외로 짧게 가져가되, 과민 반응으로 스로틀링이 발생하지 않도록 연속 실패 기준을 둔다.
이미지 변환과 리사이즈를 에지에서 처리하면 오리진 부하가 줄고, 변환 결과를 노드에 캐시해 체감 속도를 높인다. 다만 변환 비용이 단가로 청구되는 경우가 많아, 미리 세분화된 프리셋을 정의하고 예상 조합을 제한해야 청구서가 폭주하지 않는다. URL 쿼리로 자유롭게 사이즈를 받는 구조는 관리가 어렵다. 프리셋 ID를 통해 사이즈와 품질을 맵핑하고, 허가되지 않은 조합을 거절한다.
데이터 신선도와 체감 속도의 균형
오피뷰 같은 서비스에서 목록의 정렬이나 점수는 자주 바뀐다. 모든 페이지를 캐시에서 오래 들고 있으면 무언가 어색해 보인다. 이때는 데이터 신선도 전략을 다양화한다. 리스트의 헤더와 공통 블록은 길게 캐시하고, 변동이 심한 데이터만 CSR로 주입한다. 예를 들어 인기 지표와 재고 정보는 진입 후 1초 지연 뒤 비동기 갱신하면, 사용자 체감은 빠르고 데이터는 최신에 가깝게 유지된다.
시간 기반 무효화만으로 부족하면 이벤트 기반을 섞는다. 특정 매장 상태가 바뀌는 순간 웹훅을 통해 캐시 태그를 퍼지하고, 접속 중인 클라이언트에는 서버 푸시 이벤트나 간단한 폴링으로 변경을 반영한다. 모든 페이지가 실시간일 필요는 없다. 사용자 기대가 높은 영역, 예를 들어 검색 결과 상단의 필터 적용 결과나 즐겨찾기 상태만 즉시성을 유지한다.
로딩 순서의 기술: 우선순위 힌트와 자원 경쟁 완화
네트워크는 슬롯이 있다. 브라우저는 동시에 많은 파일을 요청하지 못하고, 초기 연결 설정에도 시간이 든다. 우선순위를 힌트로 알려주면 작은 비용으로 큰 이득을 얻는다. 핵심 CSS는 preload와 rel=preconnect로 연결을 미리 만든다. LCP 이미지에는 fetchpriority=high를 부여하고, 중요하지 않은 스크립트에는 priority를 낮추거나 defer로 배치한다. HTTP/2 환경에서는 도메인을 쪼개는 방법이 오히려 역효과일 때가 많다. 같은 커넥션으로 멀티플렉싱하는 편이 안정적이다.
압축 포맷 선택도 영향이 있다. 텍스트 리소스는 브로틀리 우선, 이미지나 영상은 자체 포맷에 맡긴다. 서버에서 accept-encoding 협상을 명확히 하고, CDN과 오리진 모두에서 이중 압축이나 중복 변환이 일어나지 않게 설정을 점검한다. 실제 운영에서 중복 압축으로 인해 CPU가 낭비되고 TTFB가 늘어나는 사례가 잦다.
프리렌더, 프리페치, 그리고 과유불급
프리페치는 사용자 행동 예측이 성공할 때 빛난다. 지역 목록에서 상세 페이지로 진입할 확률이 높다면, 뷰포트에 보이는 카드의 상세 HTML이나 핵심 데이터 JSON을 미리 받아 두면 체감이 확 좋아진다. 다만 과도한 프리페치는 모바일에서 데이터 사용량과 배터리를 잡아먹는다. 정책을 세워야 한다. 네트워크 상태가 양호하고, 사용자가 1초 이상 해당 카드에 머물렀을 때만 프리페치를 실행한다. 뒤로 가기 경험을 위해 이전 페이지의 스크롤 위치와 데이터 스냅샷을 메모리 캐시에 유지하면 두 번째 방문이 번개처럼 빨라진다.
프리렌더는 더 공격적이다. 다음 페이지 전체를 렌더해놓는 방식이라 성공하면 클릭 즉시 전환된다. 그러나 맞히지 못하면 리소스 낭비다. 추천 순위 상위 1~2개 후보에 한정하거나, 실험군에서만 적용해 효과를 검증하고 점진적으로 확대한다.
측정과 회귀 방지: 숫자로 관리하기
최적화는 측정 없이는 방향을 잃는다. LCP, INP, CLS 같은 코어 웹 바이탈 지표를 기준으로 삼되, 서비스 특성을 반영한 내부 북극성 지표를 함께 본다. 예를 들어, 첫 유의미 콘텐츠 표시까지의 시간, 상세 페이지 최초 상호작용 가능 시점, 이미지 평균 전송량, CDN 캐시 적중률, 캐시 퍼지 후 재적중까지의 시간 같은 운영 지표가 필요하다.
실사용 데이터, 즉 RUM을 수집해 지역과 기기별로 분포를 본다. 평균이 아닌 퍼센타일 75 혹은 90 기준으로 관리하는 것이 안정적이다. 배포 파이프라인에는 성능 회귀 알림을 넣는다. 특정 커밋 이후 번들 크기가 20KB 증가하거나, LCP가 200ms 악화되면 자동 경고가 뜨도록 한다. 체감 개선을 엔지니어링 팀만 알고 넘어가면 안 된다. CS와 마케팅, 운영팀에도 요약 리포트를 공유해, 트래픽 변화와 이탈률 변동을 함께 해석한다.
보안과 성능의 접점
보안 헤더와 성능은 종종 충돌한다. 예를 들어 엄격한 CSP를 설정하면 인라인 스크립트가 막혀 크리티컬 인라인 스니펫을 쓰기 어렵다. 해시 기반으로 필요한 인라인만 허용하면 균형을 잡을 수 있다. 쿠키 속성에서 secure와 sameSite=strict는 필수지만, 도메인 분리 전략과 충돌하면 인증된 이미지 요청이 실패해 프리로드가 무색해진다. 이미지 CDN에 서명 URL을 쓰는 경우 유효기간이 너무 짧으면 캐시 효율이 떨어진다. 보안 요구 수준과 성능 지표를 함께 놓고, 만료를 분 단위로 조정해 이득을 극대화한다.
DDoS 방어 레이어가 과도하게 엄격하면, 합법적 크롤러와 사용자 프리페치를 차단해 체감이 나빠진다. 사용자 에이전트와 레퍼러, 요청 패턴을 기준으로 정교한 허용 정책을 세워, 성능 최적화와 공존하도록 설계한다.
모바일 네트워크의 현실 처리
지하철 환경, 저성능 기기, 절전 모드가 겹치면 데스크톱에서의 최적화가 무력해진다. 모바일에서는 자바스크립트 실행 비용이 병목이 되기 쉽다. 스크롤 이벤트나 리사이즈 핸들러를 쓰로틀링하고, 관찰자 API로 교체한다. 이미지 지연 로딩도 인터섹션 옵저버를 기본으로 하고, 폴백이 필요한 오래된 브라우저는 사용자 비중을 보고 결정한다. 패킷 손실률이 높을 때를 감안해 재시도 로직을 설계하되, 동일 요청을 오피뷰 https://xn--vu3b13mh5m.isweb.co.kr/ 중복 실행하지 않도록 디바운스한다.
오프라인 경계를 활용하는 것도 방법이다. 동일 지역에서 반복 검색이 잦다면, 마지막 검색 결과를 IndexedDB에 저장하고 재방문 시 즉시 표시한 뒤 새 데이터를 동기화한다. 이 방식은 체감 속도를 크게 끌어올리지만, 정합성 경고를 UI에 명확히 표시하고, 갱신 버튼을 가까이 둬 사용자가 주도권을 갖게 한다.
운영자가 손댈 수 있는 간단한 체크리스트
아래 항목은 개발 배포 없이도 비교적 빠르게 적용하거나 점검할 수 있다.
메인 페이지의 LCP 후보 이미지를 정확히 지정하고, fetchpriority=high와 preload 링크를 추가했는지 확인한다. 이미지 업로드 정책에서 최대 해상도와 파일 크기 제한이 설정돼 있는지, 자동 리사이즈가 적용되는지 점검한다. CDN 캐시 적중률 대시보드를 열어, 정적 자산 95% 이상, HTML 60% 이상을 목표로 모니터링한다. 브라우저 캐시 정책에서 정적 자산에 해시 파일명과 1년 캐시를 사용하고 있는지 확인한다. 제3자 스크립트 목록을 정리해, 사용하지 않는 태그를 제거하고 로딩 속도를 측정한다. 팀 간 협업과 변경 관리
성능은 한 번의 프로젝트가 아니라 문화다. 운영팀이 올리는 배너 한 장, 마케터가 추가한 태그 하나가 LCP를 망칠 수 있다. 변경 관리 규칙을 세워, 메인 페이지에 들어가는 이미지나 스크립트는 린트와 빌드 체크를 거치게 한다. 디자인팀과도 합의가 필요하다. 동일한 시각적 효과를 더 가벼운 수단으로 구현할 여지가 있는지 사전에 논의한다. 예를 들어 페이지 전환 애니메이션을 CSS 전환으로 대체하거나, 비디오 배경 대신 정지 프레임과 미묘한 패럴랙스를 섞어 비용을 줄이는 식이다.
성능 목표를 OKR로 명시하면 우선순위가 분명해진다. 예: 모바일 LCP P75 2.5초 달성, 이미지 전송량 평균 30% 절감, CDN HTML 적중률 65%. 목표가 있으면 의사결정이 빨라진다. 새로운 기능 기획 때도, 목표를 해치지 않는 방향으로 스코프를 조정할 근거가 생긴다.
트러블슈팅의 패턴: 느려졌을 때 어디부터 볼 것인가
갑자기 로딩이 느려졌다면 원인은 대체로 세 갈래다. 배포된 코드 변경, 외부 의존성의 장애, 인프라 자원의 포화. 우선 RUM과 서버 모니터링에서 시점과 구간을 확인한다. 특정 경로에서만 느리면 번들 회귀나 쿼리 악화일 가능성이 높고, 전반적으로 느리면 CDN 라우팅, DNS, TLS 갱신 이슈를 의심한다. 외부 API 응답 시간이 늘어나면 타임아웃과 폴백 전략이 제대로 작동하는지 본다. 예를 들어 리뷰 위젯이 내려가면 해당 블록을 비활성화하고 페이지 나머지를 정상 서비스해야 한다.
데이터베이스에서는 느린 쿼리 로그를 활성화해, 최근 1시간 기준 상위 10개의 비용 높은 쿼리를 뽑아본다. 인덱스 누락과 불필요한 정렬, 과도한 OFFSET 사용이 흔한 원인이다. 리스트 페이지네이션에서 OFFSET, LIMIT 대신 커서 기반으로 바꾸면 대용량에서 안정적이다. 캐시에서는 키 폭발이 있었는지, 태그 퍼지로 대량 무효화가 발생했는지 살핀다. 예상보다 적중률이 낮다면 vary 헤더나 쿠키 정책이 캐시 세분화를 과도하게 만들고 있을 수 있다.
사례로 보는 적용 순서
오피뷰 스타일의 메인 페이지를 예로 하자. 상단에 지역 탭과 검색바, 그 아래 인기 매장 카드 12개, 하단에는 후기와 지도 프리뷰가 있다. 적용 순서는 다음처럼 잡는 편이 효과적이었다. 먼저 크리티컬 CSS를 12KB 정도로 추출해 인라인하고, 카드 6개에 들어가는 썸네일을 preload로 지정한다. LCP 후보 이미지를 fetchpriority=high로 설정한다. 카드 구성에 필요한 최소 데이터는 서버 렌더링에 포함하고, 좋아요 상태 같은 개인화 데이터는 마운트 후 500ms 지연 로딩한다. 지도와 후기 위젯은 코드 스플리팅으로 뒤로 미루고, 뷰포트 600px 아래에서 인터섹션 옵저버 트리거로 불러온다.
CDN에서는 /, /regions/* 경로의 HTML을 5분 캐시하고, 태그를 region-id로 붙여 운영툴에서 변경 시 퍼지한다. 정적 자산은 해시 파일명으로 1년 캐시. 이미지 변환은 3가지 프리셋으로 고정해, 썸네일, 카드, 배너 기준으로 품질과 사이즈를 결정한다. RUM으로 LCP P75를 추적하고, 배포 후 24시간 내에 100ms 이상 악화되면 경고를 받는다. 이 정도만 해도 트래픽 피크에서 30% 이상의 CPU 여유가 생기고, 이탈률이 눈에 띄게 개선되었다.
마무리 전 점검 포인트
현장에서는 작은 설정 하나가 전체를 좌우한다. 마지막으로 자주 빠뜨리는 요소를 짚어본다. 브라우저 캐시를 켜두고 서버 캐시는 꺼두는 반쪽짜리 구성이 많은데, 반대로도 문제다. CDN 캐시가 있었더라도 브라우저 캐시를 적절히 쓰면 같은 유저의 재방문 속도가 크게 개선된다. 프리로드 남용은 경계해야 한다. 모든 것을 올리면 결국 아무것도 우선이 아니다. 소수의 핵심 리소스만 프리로드하고 나머지는 브라우저의 우선순위 결정에 맡긴다.
이미지의 EXIF 제거는 용량을 줄이는 쉬운 방법이다. 회전 정보가 필요한 이미지는 서버에서 회전을 적용하고 메타데이터를 제거한다. 동영상 자동 재생은 크기와 포맷, 네트워크 상태를 감안해 제한해야 한다. 무음 자동 재생이라도 모바일 데이터 환경에서는 즉시 차단하거나 썸네일 대체가 낫다. 크리티컬 경로에서 리다이렉트가 발생하지 않도록, HTTPS 강제와 www, 비-www 정규화는 에지에서 한 번에 처리한다.
오피뷰, 오피사이트의 성능 최적화는 캐시와 로딩 순서, 이미지와 스크립트 관리라는 평범한 주제의 정교한 합이다. 사용자가 가장 먼저 보는 것을 가장 먼저 보내고, 오래 두어도 되는 것은 오래 두며, 바뀌는 것만 똑똑하게 갱신한다. 디테일을 꾸준히 손보면, 숫자가 바뀌고, 체감이 달라지고, 비즈니스가 반응한다. 이 일은 어렵지만, 다시 말해 수확이 확실한 일이다.