2010-08-20 10 views
0

나는 애플 리케이션 bulding입니다 그리고 나는 YSlow 시도하고 학년 대부분의 관행에있어. 줄이기 위해 노력하고있는 jscript가 많습니다. 페이지가 여러 번 호출되기 때문에 이들 중 일부를 캐시 할 수 있기를 원합니다.캐싱 asp.net 페이지

나는 마스터 나이가 하나 있는데 스크립트와 CSS 파일을 캐시하고 싶었습니다.

어떻게해야합니까? 권장되는 모범 사례가 있습니까? 다른 성능 향상 기능이 있습니까?

+0

YSlow는 수행 할 수있는 여러 가지 성능 향상을 제안합니다. 스크립트 캐싱과 관련하여 스크립트가 개별 파일에 외부화되어 있고 클라이언트 브라우저에서 자동으로 캐싱되는지 확인하십시오. 또한 가능하면 네트워크 번호를 줄이기 위해 파일을 그룹화하여 파일 수를 줄이십시오. –

+0

여기에 무엇을 묻고 있는지 확실하지 않습니다. YSlow 권장 사항은 클라이언트 측에 대한 것입니다. ASP.NET 캐싱은 서버 측에 관한 것입니다. ASP.NET 캐시 구현은 YSlow 등급에서 아무 것도 변경하지 않습니다. –

+1

참고 : 농장에 없다면 YSlow가 e-tag에 대해 말하는 것을 무시하십시오. 농장에 있다면 더 복잡한 접근 방식을 제안하십시오. 전자 태그를 끄는 조언은 쓸모없는 것보다 나빠서 성능을 해친다. –

답변

4
  1. 는 올해 아직 RFC 2616을 다시 읽어 있나요? 그렇지 않은 경우 HTTP에 익숙하지 않은 채 웹 사이트를 구축하려는 것은 마치 술에 취한 상태에서 누군가를 유혹하려는 것과 같습니다. 다른 사람들이 많이 있기 때문에 좋은 성적을 낼 수있는 것은 아닙니다.

  2. 리소스를 일정 기간 (예 : 다음 시간/일/월 동안 안전)에서 안전하게 다시 사용할 수있는 경우 말하십시오. 만료는 물론 캐시 제어 헤더의 max-age 구성 요소를 사용하십시오 (max-age는 만료보다 낫지 만 두 가지 모두 수행하면 아무것도 발생하지 않습니다).

  3. 마지막으로 변경된 시간을 알고있는 경우 Last-Modified 헤더에서 말하십시오 (아래 참고 참조).

  4. 마지막으로 변경된 사항을 알 수 있지만 알 수있는 기능을 추가 할 수있는 경우 (예 : UPDATE의 타임 스탬프 데이터베이스 행).

  5. 변경된 사항이있을 때마다 기록을 남기고 변경할 수있는 경우 전자 태그를 작성하십시오. E- 태그는 예외를 기반으로해서는 안되지만, 미세한 해상도로 변경할 수 없다는 것을 알고있는 경우 (0.5 초마다 1 번 이상 변경할 수 없다면 가장 가까운 시간은 0.5 초입니다.) .)

  6. 마지막 변경 시간과 일치하는 날짜의 If-Modified-Since 또는 e- 태그와 일치하는 If-None-Match로 요청을 수신 한 경우 전체 페이지 대신 304를 보냅니다.

  7. 압축을 사용하십시오 (클라이언트가 두 가지를 모두 처리 할 수 ​​있다고 말하면 수축이 약간 더 좋습니다)하지만 e- 태그를 변경해야한다는 점에 유의하십시오. 이것에 대한 올바른 Vary 헤더를 보내면 IE 캐싱이 중단되므로 대신 User-Agent를 변경하십시오 (불완전한 세계에 대한 불완전한 솔루션). .NET에서 자체 압축을 수행하는 경우 압축 스트림을 플러시하면 버그가 발생하므로 Close()에서 마지막으로 플러시하기 전에 Flush()에서 출력을 플러시하는 래퍼를 작성하십시오.

  8. 캐싱을 수행하지 마십시오. 정적 파일에서 전자 태그를 끄면 더 좋은 YSlow 등급과 성능이 떨어집니다 (웹 팜에서는 YSlow에서 권장하는 더 복잡한 솔루션을 사용해야 함).YSlow가 e- 태그를 끄는 것에 대해 무시하십시오. (예를 들어 지금 버그를 고쳤으며 더 이상 말하지 않았을 것입니다) 다른 서버 유형이 동일한 요청을 처리 할 수있는 웹 팜에 있지 않는 한 (예 : IIS 및 아파치는 동일한 URI를 다루고, 야후는 이것이 이들에게 효과가있는 이유이며, 대부분의 사람들은 그렇지 않다.)

  9. 부적절한 정보가 아니라면 비공개로 공개하시기 바랍니다.

  10. 세션에 의존하는 작업을 수행하지 마십시오. 세션을 끌 수 있다면 훨씬 더 좋습니다.

  11. 많은 양의 viewstate를 보내지 마십시오. 당신이 viewstate없이 뭔가를 할 수 있다면, 훨씬 더 좋습니다.

  12. IIS로 이동하여 HTTP 헤더 섹션을 확인하십시오. 정적 파일에 적절한 값을 설정하십시오. 이 작업은 사이트 별, 디렉토리 별 및 파일별로 수행 할 수 있습니다.

  13. 대용량 파일 (.js, .css)이있는 경우 버전 번호를 지정하고 해당 버전을 액세스하는 데 사용 된 URI (blah.js /? version = 1.1.2)에 넣으십시오. 다음 번에 버전 번호를 변경할 것이므로 캐시 만료에 대해 걱정하지 않고 정말로 긴 만료 날짜 (1 년) 및/또는 하드 코딩 된 전자 태그를 설정할 수 있으며 나머지 웹은 새로운 리소스입니다. 업데이트 된 것보다.

편집 :

나는 "아래 참고 참조"라고하고 메모를 추가하지 않았다.

모든 리소스의 마지막 수정 시간, 가장 최근의 :

  1. 건 (스크립트 코드 숨김)는 전송 된 개체를 만드는 데 사용.

  2. 아무 것도 그것의 일부로 사용됩니다.

  3. 그 일부로 사용되었지만 이제 삭제되었습니다.

이 중 숫자 3은 결국 삭제되었으므로 해결하기가 가장 힘들 수 있습니다. 한 가지 해결책은 리소스 자체의 변경 내용을 추적하고 리소스를 생성하는 데 사용 된 항목을 삭제할 때이를 업데이트하는 것입니다. 또 다른 방법은 아이템을 여전히 갖고 있지만 삭제되었거나 사용되지 않은 상태에서 "소프트 삭제"하는 것입니다 다른 방법. 이 물건을 추적하는 가장 좋은 방법은 응용 프로그램에 따라 다릅니다.

+0

고마워. 정말 유용한 입력입니다. – Churchill

1

별도의 .js 및 .css 파일을 만들어야 브라우저가 캐싱을 수행합니다. js- 파일에서 모든 공백을 제거하는 js- 최소화기를 사용하는 것도 좋은 생각입니다.

> 100Kb와 같은 거대한 ViewState가있는 경우 축소 해보십시오. viewstate가 여전히 큰 경우 페이지가 너무 동적이 아닌 경우, 당신은 ...

http://aspalliance.com/472

당신은 또한 페이지의 캐싱을 사용할 수 있습니다 ... 파일로 서버에 ViewState에 저장할 수 있습니다

http://msdn.microsoft.com/en-us/library/06bh14hk.aspx

1

일반 js 및 css 라이브러리를 신뢰할 수있는 온라인 상점으로 참조 할 수도 있습니다. 예를 들어, jquery를 <script src="http://code.jquery.com/jquery-latest.js"></script>으로 추가하면 jquery 파일은 웹 사이트로 인해 캐시 된 경우에도 이전에이 주소를 참조하는 다른 웹 사이트 때문에 클라이언트 브라우저에서 캐시했을 수 있습니다. 이 방법은 장단점이 있지만 그럴 수 있습니다. 또한이 방법으로 YSlow의 응답이 변경되는지 여부는 알 수 없습니다.

+0

프로는 당신이 설명하는대로, 클라이언트가 도메인에서 최근에 아무것도 보지 못한 경우 dns-lookup에서 추가 공격을받습니다. 동일한 도메인의 여러 파일을 사용하는 경우 Pro가 강력하게 중요합니다. 나는 YSlow의 반응이 변하는 지 모르지만 누가 신경 쓰는지는 알 수 없습니다. 도구가 우리를 위해서가 아니라 도구를 사용해야합니다. –