![]() |
성능은 웹사이트의 성공에 있어서 굉장히 중요한 척도이며 오늘날의 웹 애플리케이션들은 Ajax와 같은 기술을 활용하여 굉장히 풍부한 내용들을 브라우저에 표현하고 있다. 이 책에서는 구글의 웹 성능 전도사이자 이전 야후 성능의 최고 권위자였던 저자 스티브 사우더스의 경험을 토대로 한 웹사이트의 성능을 최적화하는 다양한 기술들을 전달하고 있다.
성능은 웹사이트의 성공에 있어서 굉장히 중요한 척도이며 오늘날의 웹 애플리케이션들은 Ajax와 같은 기술을 활용하여 굉장히 풍부한 내용들을 브라우저에 표현하고 있다. 이 책에서는 구글의 웹 성능 전도사이자 이전 야후 성능의 최고 권위자였던 저자 스티브 사우더스의 경험을 토대로 한 웹사이트의 성능을 최적화하는 다양한 기술들을 전달하고 있다.
사우더스의 이전 도서인 『웹사이트 최적화 기법』(High Performance Web Sites)”은 당시 최고의 베스트셀러였으며 웹 개발에 있어서 바로 클라이언트 단의 로드 속도가 웹 성능에서 80%나 된다는 이야기를 통하여 굉장한 충격을 주기도 하였다. 이번 도서인 『초고속 웹사이트 구축』에서 사우더스는 8명의 전문가와 함께 실용적인 최고의 팁들을 제공하고 있다. 이 책에서 다루는 내용 중 주요한 내용 세 가지는 다음과 같이 나누어 볼 수 있다.
오늘날의 웹 2.0 기반의 웹사이트와 또한 풍부한 미디어를 제공하는 웹사이트에 있어서 속도는 필수적인 기술이다. 이 책을 통하여 웹사이트의 속도를 어떻게 낮출 수 있고 또한 더 빠르게 반응하기 위한 내용들을 배울 수 있을 것이다.
“ 『초고속 웹 사이트 구축』은 현대 웹사이트의 노하우들이 담겨 있으며 어떻게 웹사이트를 튜닝할 수 있는지에 대한 지혜를 다루고 있다. 나는 이 책과 같은 형식을 좋아한다. 굉장히 많은 주제를 다루고 있고 그 내용에 대한 주제가 다른 분야의 저자들보다 아주 깊기 때문이다. 나는 이 책을 나의 팀원 모두에게 돌릴 것이다.”
- 빌 스콧(넷플릭스 UI 엔지니어링 팀장)
Trade-offs: 얻는 것이 있으면 잃는 것이 있다
최적화의 원칙
Ajax
브라우저
Wow!(우와!, olleh?)
JavaScript
요약
그럼 대체 얼마나 빨라야 빠른 것일까?
지연 시간 측정
– 지연 시간이 길어져 문제가 될 때
스레드 사용
빠른 응답 속도를 보장하는 방법
– Web Workers
– Gears
– 타이머
– 메모리 사용이 응답 시간에 미치는 영향
– 가상 메모리
– 메모리 문제 해결하기
요약
그 외 모든 것들
쪼갬으로 인해 얻는 이득
어디를 쪼개면 될까
미정의 심볼과 경쟁 상태
사례 연구: Google 캘린더
스크립트 블록
스크립트를 사이좋게 만드는 방법
– XHR Eval
– XHR Injection
– Iframe 안의 스크립트
– 스크립트 DOM Element
– 스크립트 지연
– document.write 스크립트 태그
브라우저의 작업 중 표시
순서대로 실행되도록(또는 실행되지 않도록) 하기
지금까지의 결과를 정리해보면
그럼 최종 승자는?
코드 예제: menu.js
경쟁 상태
비동기 방식으로 순서 보존하기
– 제1 기법: 하드 코딩된 콜백
– 제2기법: Window Onload
– 제3기법: 타이머
– 제4 기법: 스크립트 Onload
– 제5 기법: 나쁜 스크립트 Tags
여러 외부 스크립트
– 관리 XHR
– DOM Element와 Doc Write
일반적인 해결책
– 단일 스크립트
– 복수의 스크립트
비동기 로딩의 실제 사용 예
– Google Analytics와 Dojo
– YUI Loader 도구
인라인 스크립트는 블로킹한다
– 인라인 스크립트를 맨 밑으로 옮겨라
– 스크립트의 실행을 비동기적으로 시작하라
– 스크립트 지연 사용하기
CSS와 자바스크립트의 순서 보존하기
위험: 인라인 스크립트 바로 다음에 오는 스타일시트
– 인라인 스크립트가 블로킹되는 경우는 거의 없다
– 인라인 스크립트는 스타일시트로 인해 블로킹된다
– 실제로도 일어난다
유효 범위 관리
– 지역 변수 사용하기
– 유효 범위 체인의 증가
효율적인 데이터 접근
실행 경로 제어
– 빠른 조건문
– 빠른 반복문
문자열 최적화
– 문자열의 연결
– 문자열들의 공백 제거
오랜 시간 동작되는 스크립트를 피하라
– 타이머를 이용하여 유연하게 만들기
– 유연한 작업을 위한 타이머의 패턴
요약
코멧 구현하기
전송기술
– 폴링
– 롱 폴링
– 포에버 프레임
– XHR 스트리밍
– 미래의 전송기술
크로스 도메인
추가적인 고려사항
– 커넥션 관리
– 성능 측정
– 프로토콜
요약
무엇이 문제인가?
원인은 무엇인가?
– 빠른 검토
– 범인
– 범인의 실체
이러한 사용자를 어떻게 도울 수 있을까?
– 압축되지 않은 크기의 최소화
– 사용자를 가르쳐라
– Gzip 지원의 직접적인 감지
이미지 최적화를 단순화하기 위한 두 단계
이미지 포맷들
– 배경지식
– 이미지 타입들의 특징
– PNG에 대해서
자동화된 무손실의 이미지 최적화
– PNG 크러싱
– JPEG의 메타데이터 제거
– GIF에서 PNG로 변환하기
– GIF 애니메이션의 최적화
– Smush.it
– 큰 이미지를 위한 JPEG의 로딩기능
알파 투명: AlphaImageLoader를 피해라
– 알파 투명의 효과
– AlphaImageLoader
– AlphaImageLoader의 문제
– 단계적인 PNG8의 알파 투명도
자르기(Sprite)의 최적화
– 사용자 스프라이트와 모듈 스프라이트와의 비교
– CSS 스프라이트의 최적화
다른 이미지의 최적화
– 확장 가능한 이미지를 피해라
– 애플리케이션에서 생성된 이미지들
– 파비콘
– 애플 터치 아이콘
요약
크리티컬 경로
도메인 공유는 무엇인가?
HTTP/1.0의 다운로드
도메인 공유의 동작
– IP주소와 호스트이름
– 도메인의 개수
– 리소스를 어떻게 나누어야 하는가?
– 새로운 브라우저들
헤더의 플러쉬
출력 버퍼링
청크 인코딩
Flush와 Gzip
다른 중개자들
플러쉬 동작 중 발생되는 도메인 블로킹
브라우저: 마지막 장애물
PHP 외의 플러쉬 작업
플러쉬 체크리스트
가장 비싼 DOM 개체
Onload 이벤트를 지연시키는 아이프레임
아이프레임과 동시 다운로드
– 아이프레임 이전의 스크립트
– 스타일시트 앞에 있는 아이프레임
– 스타일시트 뒤에 있는 아이프레임
호스트이름에 할당되는 커넥션
– 아이프레임 안에서의 커넥션 공유
– 새 창과 탭을 통한 커넥션 공유
아이프레임의 비용에 대한 요약
선택자의 타입
– ID 선택자
– 클래스 선택자
– 타입 선택자
– 이웃 선택자
– 자식 선택자
– 하위 선택자
– 전체 선택자
– 속성 선택자
– 유사 클래스 선택자
CSS 선택자의 효율적인 사용
– 오른쪽 먼저
– 효율적인 CSS 선택자의 사용
CSS 선택자의 성능
– 복잡한 선택자의 성능 이슈
– 피해야 하는 CSS 선택자
– 리플로우 시간
실 사이트에서의 CSS 선택자
패킷 분석 도구
– HttpWatch
– 파이어버그 넷 패널
– AOL 페이지테스트
– VRTA
– IBM 페이지 디테일러
– Web Inspector 리소스 패널
– 피들러
– 찰스
– 와이어샤크
웹 개발 도구
– 파이어버그
– Web Inspector
– 인터넷 익스플로러 디벨로퍼 툴바
성능 분석 도구
– YSlow
– AOL 페이지테스트
– VRTA
– neXpert
기타 도구들
– 햄머헤드
– Smush.it
– Cuzillion
– UA 프로파일러