내 JS 파일 캐싱 Chrome 중지


136

JS 파일을 변경하지만 브라우저에서 실제로 변경되지는 않으므로 파일을 다시로드 할 때마다 파일 이름을 바꿔야합니다. 추가 할 수있는 일종의 .htaccess 명령이나 캐싱을 중지시킬 수있는 것이 있습니까?

심지어 html 페이지 하드 코어를 캐싱하고 있습니다. 변경 사항을 보려면 전체 브라우저를 다시 열어야합니다. 서버 문제 일 수 있습니까?


웹 서버에서 ETag 헤더를 사용하면 Chrome이 파일을 변경했을 때 새 파일 사본을 캐시하지만 올바르게 검색합니까?
개발자 웹

답변:


200

오른쪽 상단의 설정 아이콘을 클릭 할 수 있습니다. ...| 더 많은 도구 | 개발자 도구 | 네트워크 | 캐시 비활성화 (DevTools가 열려있는 동안)

Windows의 경우 Mac에서 F12또는 CTRL + SHIFT + IMac에서 CMD + SHIFT + IDevTools가 열립니다.

Chrome 업데이트 2018 년 9 월의 새로운 경로 :

오른쪽 상단에서 설정 아이콘을 클릭하십시오. ...| 설정 | 환경 설정 | 개발자 도구 | 네트워크 | 캐시 비활성화 (DevTools가 열려있는 동안)


4
페이지가 캐시 없음으로 표시되어 있어도 크롬이 물건을 캐싱하지 못하는 주요 실패 .. 적어도이 작업은 사용자가 고통을받을 수 있지만 적어도 개발할 수는 있습니다.
Robert Noack

4
"설정"은 더 이상 오른쪽 하단에 없습니다. 오른쪽 상단 에있는 3 개의 점 메뉴를 클릭하여 설정으로 이동하십시오.
yizzlez

4
위치 : 오른쪽 상단 | "..."| 설정 | 환경 설정 | 네트워크 | "캐시 비활성화"(DevTools가 열려있는 동안).
atom88

1
이것은 매우 나쁜 실천입니다! 아니요, 사용을위한 임시 해킹이 없어야합니다. 모든 사용자를위한 영구 솔루션이 있어야합니다. 가장 좋은 방법은 src 끝에 임의의 쿼리 문자열입니다. src = "someJs.js? someRandomStringCreatedByInlineJsOrServerRenderedCode"는 매번 새로운 버전을 갖도록 만듭니다. 좋은 임의 문자열은 오늘 날짜 / 시간을 잡고 거기에 던져 넣는 것입니다. 아마도 날짜 객체 일 것이므로 문자열로 바꿔야 할 수도 있습니다. 이것이 선택한 답변이고 너무 많이 찬성하는 것은 정말 나쁩니다.

1
Chrome 61.0.3163.100부터는 옵션이 추가 도구 / 네트워크 조건에있는 것으로 보입니다. "개발자 도구"옵션이 더 이상 존재하지 않습니다.
Ilia Koulikov

61

주소 표시 줄 옆에있는 새로 고침 아이콘을 마우스 오른쪽 버튼으로 클릭하고 캐시 비우기 및 하드 새로 고침을 선택하면 더 빠른 방법입니다.

Chrome의 개발 도구가 열려 있는지 확인하십시오. 그건 그렇고 ...이 트릭은 Windows, Ubuntu 및 Mac OS 용 Chrome에서만 작동합니다.


2
참고로, 나는이 모든 것을 시도했지만 전혀 효과가 없었습니다. 내 컴퓨터 (Mountain Lion에 대한 기본 설정)에서 F12는 대시 보드를 표시합니다.
Aubrey Goodman 2016 년

2
허용 된 답변보다 훨씬 낫습니까? 허용 된 답변으로 정상적으로 다시로드 할 수 있습니다.
SSH 이번

아니 당신은 할 수 없습니다. 적어도 나는 할 수 없습니다. 답이 전혀 효과가 없었지만 여전히 로컬 js 파일에서 삭제 된 경고가 팝업되지만 크롬의 캐시 된 js 파일에는 여전히 있습니다.
Burak Karakuş

1
나를 위해 작동합니다. dev-tools가 열려 있는지 확인하십시오. 그렇지 않으면 마우스 오른쪽 버튼을 클릭해도 메뉴가 표시되지 않습니다.
Venryx

옵션이 표시되지만 제 경우 스크립트가 새로 고쳐지지 않았습니다.
Ilia Koulikov

25

새로 고침 버튼을 클릭 한 상태에서 Shift 키를 길게 누릅니다.


12

같은 것을 추가하십시오 script.js?a=[random Number]PHP에서 생성 한 난수와 .

pragma "no-cache"및 "cache-control = NO-CACHE"expire = 0을 사용해 보셨습니까? (나는 그들이 스크립트에 대해 말하는 것을 몰라).


2
나는이 질문을 우연히 발견하고 답을 훑어 보았습니다. 1) 모든 요청에서 임의의 숫자를 생성하면 브라우저가 방문 할 때마다 파일을 다시 다운로드하게됩니다 . 당신은 원하는 빌드 시간 당신이 위치를 변경할 때 브라우저는 값을 다시 생성 그래서, 값입니다. PHP는 런타임으로 해석되므로 배포시 대신 수행해야 할 수도 있습니다. 그리고 2) 난수를 생성한다는 것은 때때로 (시간이 지남에 따라 확률이 증가함에 따라) 브라우저가 임의의 오래된 캐시 사본을 생성한다는 것을 의미합니다. 요청 시간에해야 할 경우 타임 스탬프를 사용하십시오!
JakeRobb

헤더 캐시 값에 적절한 타임 아웃 (1 일)과 함께 빌드 버전 번호를 사용하고 있습니다.
Worthy7

11

몇 가지 아이디어 :

  1. Chrome에서 페이지를 새로 고칠 때 CTRL + F5를 수행하여 완전히 새로 고칩니다.
  2. 만료를 0으로 설정하더라도 세션 중에는 계속 캐시됩니다. 브라우저를 다시 닫았다가 다시 열어야합니다.
  3. 서버에 파일을 저장할 때 타임 스탬프가 업데이트되는지 확인하십시오. Chrome은 HEAD전체 GET 대신 명령을 실행하여 전체 파일을 다시 다운로드해야하는지 확인하고 서버는 타임 스탬프를 사용하여 확인합니다.

서버에서 캐싱을 비활성화하려면 다음과 같이 할 수 있습니다.

Header set Expires "Thu, 19 Nov 1981 08:52:00 GM"
Header set Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
Header set Pragma "no-cache"

htaccess로


이것을 제외하고 pre-check = 0, post-check = 0은 나를 변화시킨 추가 사항입니다.
TadLewis

7

빠른 단계 :

1) Chrome 메뉴-> 도구-> 개발자 도구로 이동하여 개발자 도구 대시 보드를 엽니 다.

2) 오른쪽의 설정 아이콘을 클릭하십시오 (장부입니다!)

3) "캐시 비활성화 (DevTools가 열려있을 때)"확인란을 선택하십시오.

4) 이제 대시 보드가 가동되는 동안 새로 고침을 누르면 JS가 캐시되지 않습니다!


1
그러나 WebStorm을 사용하여 디버그하는 것은 도움이되지 않습니다. 그러면 DevTools가 열려 WebStrom이 디버거를 연결할 수 없습니다.
Alexander Volkov

5

문제는 Chrome이 must-revalidate 파일을 다시 가져와야하는지 확인하기 위해 이 Cache-Control` 헤더에 있어야한다는 것입니다.

언제든지 SHIFT-F5를 사용하여 Chrome을 강제로 새로 고침 할 수 있지만 서버에서이 문제를 해결하려면 다음 응답 헤더를 포함하십시오.

Cache-Control: must-revalidate

그러면 Chrome에서 서버를 확인하고 최신 파일이 있는지 확인합니다. 최신 파일이 있으면 응답으로 파일을받습니다. 그렇지 않은 경우 304 응답을 수신하고 캐시에있는 응답이 최신 상태임을 보증합니다.

이 헤더를 설정하지 않으면 파일을 무효화하는 다른 설정이 없으면 Chrome은 절대 서버에 최신 버전이 있는지 확인 .

다음은 이 문제를 자세히 설명 하는 블로그 게시물 입니다.


1
나는 그것이 Cache-Control: must-revalidate대신 해야한다고 생각합니다 Cache-Control: must-validate. 나는 후자가 유효하다고 생각하지 않습니다.
László Monda

3

내 웹 응용 프로그램을 업데이트 할 때 핸들러를 사용하여 단일 JS 파일을 반환하여 서버에서 큰 히트를 피하거나 작은 쿼리 문자열을 추가합니다.

<script type="text/javascript" src="/mine/myscript?20111205"></script>

2
이것은 독창적 인 연습처럼 보이지만 쿼리 문자열을 찾을 때 캐시가 중단되는 일부 프록시에 문제가있을 수 있습니다. developers.google.com/speed/docs/best-practices/…
Francois Bourgeois

2
대신 어떻게해야합니까?
BlueSky

1
<Files *>
Header set Cache-Control: "no-cache, private, pre-check=0, post-check=0, max-age=0"
Header set Expires: 0
Header set Pragma: no-cache
</Files>

1

나는 이것이 "오래된"질문이라는 것을 안다. 그러나 캐싱으로 인한 두통은 결코 없습니다. 많은 시행 착오 끝에 웹 호스팅 제공 업체 중 하나가 CPanel을 통해 Cachewall이라는이 응용 프로그램을 가지고 있음을 발견했습니다. 방금 개발 모드 사용을 클릭하고 ... voilà !!! 그것은 오랫동안 고통받는 고통을 멈췄습니다 :) 이것이 다른 누군가를 돕기를 바랍니다 ... R


0

웹 사이트를 탐색 할 때 (실제 도메인이있는 회사 서버 호스팅) 동일한 CSS 파일을 얻었고 크롬에서 업데이트 된 버전을 얻을 수 없었습니다. Firefox에서 파일을 찾아 볼 때 업데이트 된 버전의 파일을 얻을 수있었습니다. 이 답변들 중 어느 것도 나를 위해 일하지 않았습니다. 또한 내 컴퓨터에 웹 사이트 파일이 있고 로컬 아파치 서버를 사용하여 localhost로 사이트를 탐색합니다. 아파치 서버를 종료하고 업데이트 된 파일을 얻을 수있었습니다. 어떻게 든 로컬 아파치 서버가 크롬 캐시를 망쳤습니다. 이 문제를 해결하기가 매우 어려웠으므로 누군가에게 도움이되기를 바랍니다.


0
  1. 개발자 도구 열기

    • F12
    • 또는 ...-> More Tools->Developer Tools
  2. 딸깍 하는 소리 Empty Cache and Hard Reload

    • 마우스 오른쪽 버튼으로 새로 고침 아이콘 (URL 주소 표시 줄의 왼쪽)
    • 또는 왼쪽 클릭 새로 고침 아이콘을 1 초 동안 누르고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.