2009-10-12 7 views
4

쿠키없는 도메인 (정적 블로그!)에서 정적 컨텐츠를 제공하는 PHP 사이트를 개발 중이며,이 도메인은 높은 캐시를 가진 컨텐츠를 제공합니다. 콘텐츠를 (JS, CSS 및 이미지) 그 캐시를 무효화하지 않고. 현재 수정 버전 (예 : style.css? 19)을 정적 URL의 끝에 추가하여 현재이 작업을 수동으로 수행하고 있습니다. 이는 분명 편리하지 않습니다.정적 컨텐츠 자동 버전 지정

이것을 완료하는 데 권장되는 방법은 무엇입니까? 저는 Subversion을 사용하고 있습니다. 그리고 저의 의견으로는 리비전 번호를 얻기 위해 사용할 수있는 다양한 도구가 있습니다. 그러나 이것을 PHP로 가져 오려면 어떻게해야할까요? (모든 페이지로드를 실행하는 것이 현명한 성능이라고 생각지 않습니다.) 나는 어떤 종류의 빌드 시스템을 사용해야 할 것 같아요.

모든 권장 사항에 크게 감사하겠습니다.

감사

답변

3

SVN keyword substitution는 해결책이 될 수 있습니다. 이런 식으로 사용할 수 있습니다 : 먼저 다음 코드를 PHP 코드에 추가하십시오. PHP 코드는 버전을 사용하고자하는 곳 근처에 있습니다. 이렇게 :

$svn_version = '$Revision$'; // remember to use single quotes! 

이제 파일을 커밋하십시오. 그런 다음 다시여십시오. 위의 행이 이제 다음과 같이 변경되었음을 확인하십시오.

$svn_version = '$Revision: 66232 $'; 

SVN이 키워드 태그를 인식하고 수정 번호로 바 꾸었습니다. 이 태그는 지금부터 해당 파일을 커밋 할 때마다 최신 버전 번호로 업데이트되며, 체크 아웃 또는 내보내기를 수행 할 때 버전 번호도 포함됩니다.

이제이 문자열에서 해당 번호를 가져 오려면 약간의 문자열 조작 만 수행하면됩니다. 너 자신을 알아낼 수있을거야.

물론 PHP를 건드리지 않고 실제 css/js 파일을 업데이트하면이 기능이 작동하지 않습니다. 그리고 그것은 쉽게 해결 될 수 없습니다. CSS/JS를 변경할 때마다 PHP를 변경할 수 있습니다. 또는 예 inded, 당신은 일부 빌드 시스템에 갈 수 있습니다.

어쨌든이 아이디어를 얻었 으면 좋겠습니다.

+0

대신 반가워요.하지만 PHP 파일이 업데이트되어야한다고 말했듯이 (사실 정적 콘텐츠를 참조하는 파일이 10 개). 수동으로 수를 편집 할 수도 있습니다. –

+0

하지만 정적 URL의 끝에 현재 타임 스탬프를 추가하면 어떨까요? 이는 효과적으로 캐시를 우회합니다. –

+1

현재 타임 스탬프? 그러나 캐시는 모든 페이지로드가 무효화 될 것이고 정적 물건이 실제로 변경 될 때만 변경되기를 원합니다. –

1

아이디어는 숫자 (즉, 개정 번호) 만 포함하는 텍스트 파일을 갖는 것입니다. 매번 업데이트 할 때마다이 숫자를 증가시킵니다 (원하는대로 SVN 버전 ID 또는 카운터로).

제안대로 진행하십시오. 파일의 번호를 읽고 CSS 또는 다른 파일에 GET 인수로 전달합니다. 하나는 구현되었으므로 모든 페이지에서 업데이트하기 위해 개정 번호를 업데이트해야합니다 (사용하는 경우 캐시를 정리할 수도 있습니다). 아주 쉽습니다 :)

2

CSS/Javascript 파일의 버전 관리에 사용할 수있는 훌륭한 PHP script 및 .htaccess 집합이 있습니다. 모든 CSS/JS 요청을 파일 combine.php로 다시 작성하여 파일이 수정되었는지 확인합니다. 파일이 있으면 캐시 된 새 버전의 파일을 만듭니다. 수정되지 않은 경우 파일의 이전에 캐시 된 버전 만 보낼 수 있습니다. 이 스크립트는 또 다른 성능 향상 인 HTTP 요청 수를 최소화하는 이점이 있습니다.

이미지가 더 어렵습니다 - 기본 레벨에서 이미지 이름을 찾기 위해 CSS 파일을 검색/교체하고 업데이트 할 수 있습니다. 이것은 빌드 스크립트에 통합 될 수 있습니다. SASS은 CSS 내의 변수를 지원하는 CSS 처리 시스템으로 이미지 이름을 한 곳에서 업데이트하면됩니다.

마지막으로, Fiddler과 같은 도구를 사용할 때 검색어 문자열이 요청에 포함되어있는 경우 브라우저가 헤더 만료를 무시하고 어쨌든 서버에 접속할 수 있으므로 하위 디렉토리에 배치하는 것이 더 좋을 수 있음을 발견했습니다. ie

/css/main.css?16 

/css/16/main.css 
관련 문제