2014-02-05 1 views
0

에서 HTML 5 boilerplate template 겪고들이 어떻게 추가합니까? V = 1 스크립트로드 새로운 자바 스크립트

<!-- CSS : implied media="all" --> 
<link rel="stylesheet" href="css/style.css?v=1"> 

<!------ Some lines removed ------> 

<script src="js/plugins.js?v=1"></script> 

을 사용했다하지만 어떻게이 도움이하는 장소의 몇 가지 관찰하는 동안? 쿼리 문자열이 어떻게 작동합니까? 파일 이름을 변경하지 않았거나 쿼리 문자열 (? v = 1)을 사용하여 스크립트를 작성하지 않았습니다.

무엇이 누락 되었습니까? 파일 이름을 변경해야합니까, 아니면이 작업을 수행하기 위해 저장소가 있어야합니까?

+2

글쎄, 그것은 같은 URL이 아니기 때문에 캐시는 동일한 파일을 서버 할 수 없습니다 ... –

+1

우리는 이것을 "캐시 버스터 (cache buster)"라고했습니다. 물론 정적 인 경우 (항상 1, 타임 스탬프는 말하지 않음) 매우 좋지 않습니다. (웹 서버 및.css 파일은 쿼리 문자열을 무시합니다. –

+0

@ebyrob 파일을 업데이트 할 때마다 수동으로 증가시키지 않는 한. – Mike

답변

7
  1. 대부분의 웹 서버는 URL 끝 부분에 어떤 검색어를 입력했는지에 관계없이 정적 파일을 제공합니다.
  2. 브라우저는 URL을 기반으로 데이터를 캐시합니다.
  3. URL을 다른 것으로 변경하면 이전 URL에서 캐시 된 버전을 가져 오지 않지만 (1)을 지정하면 서버 디스크의 동일한 위치에 저장된 (새 버전의) 파일이 제공됩니다 .

하지만 어떻게 도움이됩니까? 쿼리 문자열이 어떻게 작동합니까? 파일 이름을 변경하지 않았거나 쿼리 문자열 (? v = 1)을 사용하여 스크립트를 작성하지 않았습니다.

그러면 도움이되지 않습니다. 파일을 변경할 때 쿼리 문자열을 변경해야합니다.

무엇이 누락 되었습니까? 나는 파일 이름을

없음

을 변경할 필요가 또는 확인이 작업을 얻을 수 있도록 내가 저장소가 필요합니까?

새 파일 버전을 릴리스 할 때 쿼리 문자열을 변경해야합니다.

한 가지 방법은 URL을 (예를 들어) 버전 제어 저장소의 파일을 마지막으로 변경 한 커밋 ID로 설정하는 빌드 스크립트를 사용하는 것입니다.

+0

좋은 대답 - 캐시를 중지하는 것 외에는 쿼리 문자열의 내용이 중요하지 않음을 설명 할 수 있습니다. – Hogan

+0

정적 파일이므로 서버가 쿼리 문자열을 무시합니다. – Quentin

+0

예, 저의 요점은'js/plugins.js? asldkfjdsafs'입니다. 다른 점을 제외하고는 브라우저가 처리하는 방법에 의미상의 차이가 없습니다. – Hogan

1

쿼리 문자열을 사용하면 브라우저에 "안녕하세요, 내 파일이 변경되었습니다"라고 말하면서 버전 번호를 업데이트하여 클라이언트 캐시를 강제로 새로 고칩니다. 그렇지 않으면 클라이언트가 로컬 캐시에 유효한 버전을 가지고 있으면 브라우저가 파일을 가져 오지 않습니다.

만약 내일, 당신은 CSS 파일을 변경하고, 당신은 모든 업데이트에 등

<link rel="stylesheet" href="css/style.css?v=2"> 

에 URL을 변경하여 자신의 캐시를 새로 클라이언트를 강제로 ... 수 있습니다.

이 방법을 사용하면 명시 적으로 CSS 링크를 업데이트하지 않는 한 브라우저가 정적 파일 캐시를 업데이트하지 않도록 HTTP 헤더 (1 개월 이상)에 캐시 헤더를 길게 설정할 수 있습니다.

+1

파일의 변경 사항이 아니라 단지 링크입니다. – Hogan

+0

그래, 내 말을 섞어서 고칠 수도있어. –