2011-12-06 2 views
1

라이브 웹 사이트 (PHP, MySQL, JS, CSS 사용)가 있고 일부 기능을 변경한다고 말하면됩니다. 사용자가 사이트를 방문 할 때 변경된 페이지가 업데이트되고 캐시에서로드되지 않도록하는 가장 좋은 방법은 무엇입니까?웹 사이트 업데이트 캐시

답변

3

파일 로더가 있습니다. css, js 또는 다른 파일을로드 할 때 캐시 제어 헤더를 설정해야합니다. .htaccess 또는 php로 편집 할 수 있습니다.

.htaccess 데모

<IfModule mod_expires.c> 
ExpiresActive On 
ExpiresDefault A300 
ExpiresByType image/x-icon A2592000 
ExpiresByType application/x-javascript A3600 
ExpiresByType text/css A3600 
ExpiresByType image/gif A604800 
ExpiresByType image/png A604800 
ExpiresByType image/jpeg A604800 
ExpiresByType text/plain A300 
ExpiresByType application/x-shockwave-flash A604800 
ExpiresByType video/x-flv A604800 
ExpiresByType application/pdf A604800 
ExpiresByType text/html A300 
</IfModule> 

PHP 데모 :이 표준을 준수합니다,하지만 일반적으로 발생하는 브라우저가 다운로드를 수행하는 경우 당신은 정말, 각 브라우저 정책을 제어 할 수

$offset = 3600 * 24; 
$expire = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT"; 
header($expire); 
+0

아파치에 mod_expires를 설치하는 것을 잊지 마십시오. 많은 hoster는 그것을 지원하지 않습니다. –

+0

답장을 보내 주셔서 감사합니다! 이것이 해결책 일 수있는 것 같습니다. 무엇을위한 숫자입니까? A300 등은 초 단위로 캐시하는 것이 얼마나 오래 되나요? – georgesamper

+0

@ 조지 예. http://httpd.apache.org/docs/1.3/mod/mod_expires.html –

1

통해 HTML, HEAD 섹션 넣어에서 ...

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1"> 
+0

흥미 롭다. 나는 들어 본 적이 없다. 가능한 경우 항상 새로운 페이지를로드합니까? –

+0

예, 만료 메타는 페이지가 이미 만료되어 캐시에서로드 할 수 없음을 지정합니다. 그러나 결코 캐시되지 않으므로 페이지가 변경되지 않아도 서버에서 새로운 것을 요청할 것입니다. – craig1231

+0

내용을 동일하게 유지하면 항상 캐시하지 않는 것을 모두 설정하는 것은 좋지 않습니다. – epascarello

-1

당신은)합니다 (window.applicationCache.swapCache을 사용할 수 있습니다; 및 window.location.reload(); javascript는 사이트의 업데이트 된 버전이 있음을 확인한 후 강제로 페이지를 다시로드합니다.

더 나은 옵션은 사용자에게 어떤 방식 으로든 프롬프트를 표시하여 사이트가 업데이트되었음을 ​​알릴 수 있습니다. 그렇게하면 페이지가 갑자기 다시로드되지 않습니다.

function updateCache(){ 
    window.applicationCache.swapCache(); 
    window.location.reload(); 
} 

window.applicationCache.addEventListener("updateready", updateCache, false); 
+0

캐시 제어는 Javascript가 아닌 HEADERS를 통해 이루어져야합니다. –

+0

와 함께 사용됩니다. 네가하는 말에 혼란 스럽다. –

+0

귀하의 솔루션은 뉴스가 분 단위로 제공 될 수있는 라이브 웹 페이지에만 적합합니다. 또는 초. 하지만 이미지 캐시를 어떻게 설정할 것입니까? 그리고 window.applicationCache는 html5에서만 작동합니다. –

0

캐시에서로드되거나 재 다운로드되어야하는지 여부를 결정하기 전에 각 HTML의 헤더. (특히 캐시 제어 아래) 자세한 내용은

확인 RFC HTTP 1.1 Header Field

0

당신은 사용자를 캐싱 어떤 형태의 데이터를 요청하고이 업데이트되었는지 확인한다이 없다면. 일반적으로 PHP는 액티브 캐싱을하지 않는 한 캐쉬되지 않습니다.

귀하의 JS와 CSS는 HEADERS를 통해 Apache (또는 귀하가 사용하는 웹 서버)를 설정해야합니다.

관련 문제