출처:http://developer.yahoo.com/performance/rules.html

13: Configure ETags

Entity tags (ETags)  는 서버상의 컴포넌트와 브라우저의 캐쉬에 있는 컴포넌트가 서로 일치하는지 알기위한 매카니즘이다.Entity 는 컴포넌트(이미지,스타일시트 등)를 말한다.
ETags 는 최종수정일로 판단하는 것보다 좀 더 유연한 식별방법을 제공한다.
Etags 는 유일하게 구별할 수 있는 버젼 스트링인데, 이것은 형식은 그냥 " 로 묶여있기만 하면된다.
그리고 서버측에서 Response 의 ETag 해더에 셋팅하여 클라이언트에 전송하면 된다.

      HTTP/1.1 200 OK
      Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
      ETag: "10c24bc-4ab-457e1c1f"
      Content-Length: 12195
클라이언트에서 이 컴포넌트 검증하려면(캐쉬된 것이 최신버젼인지..) If-None-Match 해더에 ETag 값을 넣어 질의 하면 된다. 만약 최신버젼이라면 304 만 리턴된다.
그러면 위의 경우 12195 바이트 만큼 네트웍크 대역폭을 절약할 수 있다.

      GET /i/yahoo.gif HTTP/1.1
      Host: us.yimg.com
      If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
      If-None-Match: "10c24bc-4ab-457e1c1f"
      HTTP/1.1 304 Not Modified
하지만, 웹서버 클러스터를 사용하는 경우 , 각 웹서버가 각기 다른 유니크 값을 만들어 ETag를 사용한다면 하나의 웹서버에서 내려준 Etag 가 다른 클러스터 노드의 웹서버에서는 다른 것으로 간주 되는 경우가 발생하기 때문에 ETag 를 사용함으로 얻을 수 있는 이득이 감소되는 문제점이있다.

아파치나 IIS나 기본 제공되는 ETag 형식은 클러스터된 노드간 일치할 가능성이 전혀없는 형식으로 되어있다.

따라서 웹서버를 클러스트로 해서 사용하는 경우라면 차라리  ETag  를 해더에서 없애는 것이 좋다.
그리고 Last-Modifed 해더를 사용하는 것이 좋다.Microsoft Support article 에 ETag 를 없애는 법이 나와있다. 아파치에서는 구성파일에 아래의 내용을 셋팅하면 된다.

  FileETag none

14: Make Ajax Cacheable


를 이용해 AJAX 응답속도를 높일 수 있다.
이중 Rule3 이 가장 중요하다.

주소록이 하나 있다고 치자.
그 주소록의 최종 업데이트 일이 20071002(우선 년월일만 고려해보자) 라면, 이 주소록을 요청하는  AJAX URL 에 &date=20071002 라는 파라미터를 강제로 넣는 것이다. 그리고 그 결과에 대해 Expires 해더를 지정한다면  그 결과는 업데이트 날자가 변경될때 까지 브라우저에 캐쉬될 것이다.
만약 주소록이 업데이트 된다면 url 자체가 갱신 되기때문에 브라우저 캐시는 더이상 사용되지 않고 새로운 주소로 요청이 전송될 것이다. 그리고 다시 새로운 결과가 캐시될 것이다.
이렇게하면 AJAX 성능을 높일 수 있다.

Trackback Address :: http://steelleg.tistory.com/trackback/92 관련글 쓰기

댓글을 달아 주세요

  1. Favicon of http://youn83.tistory.com BlogIcon youn83 2007/10/09 21:47 Address Modify/Delete Reply

    차장님~ 너무 어려워요..ㅜㅜ
    해석은 하고 있는데 대체 무슨 말인지를 모르겠어서..
    맞는지도 모르겠어요..ㅜㅜ
    언능해서 검사 맡을께요~
    낼 뵐께요~ㅎㅎ