หยุด Chrome Caching ไฟล์ JS ของฉัน


138

ฉันจะทำการเปลี่ยนแปลงไฟล์ JS ของฉัน แต่มันจะไม่เปลี่ยนแปลงในเบราว์เซอร์จริงๆฉันต้องเปลี่ยนชื่อไฟล์ทุกครั้งเพื่อให้มันโหลดซ้ำ มีคำสั่ง. htaccess บางประเภทที่ฉันสามารถเพิ่มหรือบางอย่างเพื่อให้หยุดแคชได้หรือไม่

แม้กระทั่งการแคชหน้า html ฮาร์ดคอร์ของฉัน ฉันต้องเปิดเบราว์เซอร์ทั้งหมดอีกครั้งเพื่อดูการเปลี่ยนแปลง อาจเป็นปัญหาเซิร์ฟเวอร์หรือไม่?


การเปิดใช้งานส่วนหัว ETag ในเว็บเซิร์ฟเวอร์ของคุณทำให้ Chrome แคช แต่ดึงสำเนาไฟล์ใหม่ได้อย่างถูกต้องเมื่อมีการเปลี่ยนแปลงหรือไม่
เว็บสำหรับผู้พัฒนา

คำตอบ:


201

คุณสามารถคลิกไอคอนการตั้งค่าที่มุมบนขวา...| เครื่องมือเพิ่มเติม เครื่องมือสำหรับนักพัฒนา | เครือข่าย | ปิดการใช้งานแคช (ในขณะที่ DevTools เปิดอยู่)

สำหรับ windows นี่คือF12หรือCTRL + SHIFT + Iในขณะที่อยู่บน mac CMD + SHIFT + Iเปิด DevTools

เส้นทางใหม่สำหรับการอัปเดต Chrome กันยายน 2018:

คลิกไอคอนการตั้งค่าที่มุมขวาบน...| การตั้งค่า | ค่ากำหนด | เครื่องมือสำหรับนักพัฒนา | เครือข่าย | ปิดการใช้งานแคช (ในขณะที่ DevTools เปิดอยู่)


4
ความล้มเหลวครั้งใหญ่โดย chrome ในการแคชสิ่งต่างๆ ... แม้ว่าหน้าจะถูกทำเครื่องหมายว่าไม่มีแคช .... อย่างน้อยก็ใช้ได้ผลผู้ใช้สามารถทนทุกข์ทรมาน แต่อย่างน้อยฉันก็พัฒนาได้
Robert Noack

4
โปรดทราบว่า "การตั้งค่า" ไม่อยู่ที่ด้านล่างขวาอีกต่อไป! คลิกเมนูจุดสามจุดที่ด้านบนขวาเพื่อไปที่การตั้งค่า
yizzlez

4
สถานที่ตั้งคือ: มุมขวาบน | "... " | การตั้งค่า | ค่ากำหนด | เครือข่าย | "ปิดการใช้งานแคช" (ในขณะที่ DevTools เปิดอยู่)
atom88

2
นี่คือการปฏิบัติที่ไม่ดีมาก !!! ไม่คุณไม่ควรมีแฮ็คชั่วคราวสำหรับการใช้งานของคุณ .... คุณควรมีโซลูชันถาวรสำหรับผู้ใช้ของคุณทุกคน วิธีที่ดีที่สุดคือสตริงการสืบค้นแบบสุ่มที่ส่วนท้ายของ src src = "someJs.js? someRandomStringCreatedByInlineJsOrServerRenderedCode" ซึ่งจะทำให้มีเวอร์ชันใหม่ทุกครั้ง สตริงสุ่มที่ดีคือการคว้าวันที่ / เวลาของวันนี้แล้วโยนลงไปที่นั่น คุณอาจต้องเปลี่ยนเป็นสตริงเนื่องจากอาจเป็นวัตถุวันที่ เป็นเรื่องที่แย่มากที่นี่เป็นคำตอบที่ถูกเลือกและถูกโหวตอย่างหนัก

1
สำหรับ Chrome 61.0.3163.100 ดูเหมือนว่าตอนนี้ตัวเลือกจะอยู่ภายใต้ More Tools / Network Conditions ไม่มีตัวเลือก "เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์" แล้ว
justian

61

วิธีที่เร็วกว่านี้คือคลิกขวาที่ไอคอนรีเฟรชข้างแถบที่อยู่แล้วเลือกEmpty Cache และ Hard reload

ตรวจสอบให้แน่ใจว่าเครื่องมือ dev ของ Chrome เปิดอยู่ (กด F12) อย่างไรก็ตาม ... เคล็ดลับนี้ใช้ได้กับ Chrome สำหรับ Windows, Ubuntu และ Mac OS เท่านั้น


2
FYI ฉันลองทำทั้งหมดนี้แล้วและไม่ได้ผลเลย บนเครื่องของฉัน (ด้วยการตั้งค่าเริ่มต้นสำหรับ Mountain Lion) F12 จะแสดงแดชบอร์ด
Aubrey Goodman

2
มันดีกว่าคำตอบที่ยอมรับอย่างไร? คุณสามารถโหลดซ้ำได้ตามปกติโดยใช้คำตอบที่ยอมรับ
SSH

ไม่คุณทำไม่ได้ อย่างน้อยฉันก็ทำไม่ได้ ไม่มีคำตอบใดที่ใช้ได้ผลสำหรับฉันยังคงปรากฏการแจ้งเตือนซึ่งถูกลบในไฟล์ js ในเครื่องของฉัน แต่ยังอยู่ในไฟล์ js ที่แคชใน chrome
Burak Karakuş

1
เหมาะสำหรับฉัน ตรวจสอบให้แน่ใจว่าเครื่องมือพัฒนาเปิดอยู่มิฉะนั้นคลิกขวาจะไม่แสดงเมนู
Venryx

ฉันเห็นตัวเลือก แต่ในกรณีของฉันสคริปต์ไม่ได้รับการรีเฟรช
justian


12

เพิ่มสิ่งที่ชอบscript.js?a=[random Number]ด้วยหมายเลขสุ่มที่สร้างโดย PHP

คุณเคยลอง expire = 0, pragma "no-cache" และ "cache-control = NO-CACHE" หรือไม่? (ฉันไม่รู้ว่าพวกเขาพูดอะไรเกี่ยวกับสคริปต์)


2
ฉันสะดุดกับคำถามนี้และกำลังอ่านคำตอบ นี่เป็นความคิดที่แย่มากเพราะ: 1) การสร้างหมายเลขสุ่มตามคำขอทุกครั้งจะทำให้เบราว์เซอร์ดาวน์โหลดไฟล์ซ้ำทุกครั้งที่เข้าชม คุณต้องการค่าเวลาสร้างเพื่อให้เบราว์เซอร์สร้างค่าใหม่เมื่อคุณทำการเปลี่ยนแปลงกับไซต์เท่านั้น เนื่องจาก PHP ถูกตีความรันไทม์คุณอาจต้องทำในเวลาปรับใช้แทน และ 2) การสร้างตัวเลขสุ่มหมายความว่าบางครั้ง (ด้วยความน่าจะเป็นที่เพิ่มขึ้นเมื่อเวลาผ่านไป) เบราว์เซอร์จะสุ่มสำเนาแคชเก่า ๆ หากคุณต้องทำตามเวลาที่ร้องขอให้ใช้การประทับเวลา!
JakeRobb

ฉันกำลังทำสิ่งนี้และใช้หมายเลขเวอร์ชัน
บิว

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

ฉันรู้ว่านี่เป็นคำถาม "เก่า" แต่ปวดหัวกับการแคชไม่เคยเป็น หลังจากการทดลองและข้อผิดพลาดมากมายฉันพบว่าหนึ่งในผู้ให้บริการเว็บโฮสติ้งของเรามี CPanel แอพนี้ชื่อว่า Cachewall ฉันแค่คลิกที่เปิดใช้งานโหมดการพัฒนาและ ... voila !!! มันหยุดความเจ็บปวดที่ทรมานมานานได้ในทันที :) หวังว่านี่จะช่วยคนอื่นได้ ... R


0

ฉันได้รับไฟล์ css เดียวกันเมื่อฉันเรียกดูเว็บไซต์ (บนเซิร์ฟเวอร์ของ บริษัท โฮสติ้งที่มีโดเมนจริง) และฉันไม่สามารถรับเวอร์ชันที่อัปเดตบน Chrome ได้ ฉันสามารถรับไฟล์เวอร์ชันอัปเดตได้เมื่อฉันเรียกดูบน Firefox คำตอบเหล่านี้ไม่ได้ผลสำหรับฉัน ฉันยังมีไฟล์เว็บไซต์ในเครื่องของฉันและเรียกดูไซต์ด้วย localhost โดยใช้เซิร์ฟเวอร์ apache ในพื้นที่ของฉัน ฉันปิดเซิร์ฟเวอร์ apache ของฉันและฉันสามารถรับไฟล์ที่อัปเดตได้ อย่างไรก็ตามเซิร์ฟเวอร์ apache ในพื้นที่ของฉันยุ่งกับแคชของ Chrome หวังว่านี่จะช่วยใครบางคนได้เพราะมันยากมากสำหรับฉันที่จะแก้ไขปัญหานี้


0
  1. เปิดเครื่องมือสำหรับนักพัฒนา

    • F12 อย่างใดอย่างหนึ่ง
    • หรือ...-> More Tools->Developer Tools
  2. คลิก Empty Cache and Hard Reload

    • คลิกขวาที่ไอคอนรีเฟรช (ซ้ายไปที่แถบที่อยู่ url)
    • หรือคลิกซ้ายที่ไอคอนรีเฟรชค้างไว้ 1 วินาที

0

คุณสามารถเปิดหน้าต่างที่ไม่ระบุตัวตนแทน การเปลี่ยนไปใช้หน้าต่างที่ไม่ระบุตัวตนใช้งานได้สำหรับฉันเมื่อปิดการใช้งานแคชในหน้าต่างโครเมี่ยมปกติยังคงไม่โหลดไฟล์ JavaScript ซ้ำที่ฉันเปลี่ยนไปตั้งแต่แคชล่าสุด

https://www.quora.com/Does-incognito-mode-on-Chrome-use-the-cache-that-was-previously-stored

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.