บังคับให้ Google Chrome ตรวจสอบไฟล์ JavaScript ใหม่ทุกครั้งที่เข้าถึงเว็บไซต์


25

ดังนั้นถ้าฉันไปที่ตัวเลือกอินเทอร์เน็ตใน Internet Explorer: ป้อนคำอธิบายรูปภาพที่นี่

ฉันสามารถปรับการตั้งค่าเมื่อ IE ตรวจสอบการอัปเดต: ป้อนคำอธิบายรูปภาพที่นี่

ฉันสามารถทำสิ่งที่คล้ายกันใน Google Chrome ได้หรือไม่ ตอนนี้เมื่อฉันเปลี่ยนไฟล์ JavaScript และดีบักจาก Visual Studio Chrome จะใช้เวอร์ชันแคชแทนการใช้เวอร์ชันที่แก้ไขเสมอ เพื่อให้สามารถใช้เวอร์ชันปัจจุบันฉันต้องล้างไฟล์ชั่วคราว / แคชอินเทอร์เน็ตด้วยตนเองซึ่งน่ารำคาญจริงๆ


14
เหตุใดคุณจึงไม่ปิดใช้งานการแคชโดย Visual Studio แทน (อย่างจริงจังที่ในห่าออกแบบ IDE ที่มีแคช?)
jpmc26

2
@ jpmc26 แคชอะไรดี?
EJoshuaS - Reinstate Monica

21
ฉันพูดความคิดเห็นสุดท้ายของฉันอย่างอิสระ; ฉันขอโทษถ้ามันทำให้มันไม่ชัดเจน เบราว์เซอร์เฉพาะไฟล์แคชหากเซิร์ฟเวอร์ส่งส่วนหัวเฉพาะกลับ มันโง่สำหรับเซิร์ฟเวอร์การพัฒนาภาพสตูดิโอที่จะส่งหัวแคชกลับโดยเริ่มต้นตั้งแต่การเปลี่ยนแปลงไฟล์เหล่านั้นควรจะคาดว่า ส่วนที่สองในการโหลดหน้าพิเศษนั้นคุ้มค่าที่จะไม่จัดการกับปัญหาจากไฟล์ JS และ CSS ที่ล้าสมัยซึ่งถูกแคชไว้ในเบราว์เซอร์ ฉันหวังเป็นอย่างยิ่งว่าจะมีวิธีปิดการใช้งาน
jpmc26

1
ไม่พบตัวเลือก Visual Studio ใด ๆ แต่การเปลี่ยนแปลงการตั้งค่า web.config อาจช่วยแก้ปัญหาการแคชใน Visual Studio ได้ iis.net/configreference/system.webserver/staticcontent/…
GER

1
ส่วนขยาย Chrome "แคช Killer" แก้ไขได้สำหรับฉันฉันไม่ทราบว่าทำไม แต่ Ctrl + F5 บางครั้งไม่ทำงานสำหรับฉัน
flagg19

คำตอบ:


55

ตัวเลือก 1: ปิดใช้งานแคชชั่วคราว

  1. เปิดเครื่องมือสำหรับนักพัฒนา (กดF12หรือเมนู, เครื่องมือเพิ่มเติม, เครื่องมือสำหรับนักพัฒนา)
  2. เปิดการตั้งค่าเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ (กดF1หรือเมนู DevTools, การตั้งค่า)
  3. ทำเครื่องหมายที่ "ปิดใช้งานแคช (ขณะที่ DevTools เปิดอยู่)" ในส่วนหัวเครือข่ายของบานหน้าต่างการตั้งค่า

ตัวเลือก 2: ปิดใช้งานแคชสำหรับเซสชัน

เริ่ม Chrome ด้วยสวิตช์บรรทัดคำสั่ง--disk-cache-size=1 --media-cache-size=1ซึ่งจะ จำกัด แคชไว้ที่ 1 ไบต์เพื่อปิดใช้งานแคชอย่างมีประสิทธิภาพ

ตัวเลือก 3: การรีเฟรชแรงด้วยตนเอง

โหลดหน้าปัจจุบันไม่สนใจเนื้อหาเก็บไว้: Shift+ F5หรือ Ctrl+ Shift+r

แป้นพิมพ์ลัดของ Chrome - ความช่วยเหลือของ Chrome (ใต้ "ทางลัดหน้าเว็บ")

ตัวเลือก 4: ตัวเลือกการโหลดเพิ่มเติม ( ที่มา )

เมื่อเปิดเครื่องมือนักพัฒนาให้คลิกขวาที่ปุ่มโหลดใหม่เพื่อแสดงเมนูโหลดซ้ำด้วยสิ่งต่อไปนี้:

  • โหลดซ้ำปกติ (Ctrl + R)
  • โหลดซ้ำ (Ctrl + Shift + R)
  • แคชว่างเปล่าและโหลดซ้ำอย่างหนัก

1
@Bruno Odd ฉันยังใช้ ctrl + f5 เสมอ เพิ่งทดสอบและดูเหมือนว่าทั้งสองจะทำงาน
Jeroen

ฉันขอแนะนำให้ใช้ตัวเลือก 2 พร้อมกับบิด สร้างทางลัดแยกต่างหากไปยัง Chrome ด้วยสวิตช์และตั้งชื่อให้แตกต่างกัน วางไว้ในส่วนท้ายที่แตกต่างกันของทาสก์บาร์ของ Windows
Christopher Hostage

8

อาจไม่เกี่ยวข้องกับการรีเฟรชโครเมี่ยม 100% แต่เพื่อการพัฒนาต่อไป เช่น @Dom กล่าวว่าคุณสามารถเพิ่ม? v = # หลังจาก ressource ของคุณ วิธีหนึ่งในการทำให้กระบวนการเป็นแบบอัตโนมัติคือการแฮชเนื้อหาของไฟล์ดังกล่าวและใช้ไฟล์นั้นเป็นเวอร์ชัน

ฉันมีข้อมูลโค้ดเกี่ยวกับวิธีการนี้ใน C # (มีดโกนสำหรับการนำไปใช้) หากสิ่งนี้สามารถช่วยได้

Helper:

public static string HashUrl(string relativeUrl)
    {
        var server = HttpContext.Current.Server;
        if (File.Exists(server.MapPath(relativeUrl)))
        {
            byte[] hashData;
            using (var md5 = MD5.Create())
            using (var stream = File.OpenRead(server.MapPath(relativeUrl)))
                hashData = md5.ComputeHash(stream);

            return relativeUrl.Replace("~", "") + "?v=" + BitConverter.ToString(hashData).Replace("-", "");
        }
        return relativeUrl + "?v=notFound";
    }

การดำเนินงาน:

<link rel="stylesheet" href=@Util.HashUrl("~/Controllers/Home/Views/Index.css") />

หวังว่านี่จะช่วยได้

แก้ไข --- บางคนถามถึงการสร้างรันไทม์และสำหรับ 1,000 แหล่งข้อมูลขนาดเล็กใช้เวลาประมาณ 11 ms

https://en.code-bude.net/2013/08/07/md5-hashes-in-c-benchmark-and-speed-%E2%80%8B%E2%80%8Boptimization/

ป้อนคำอธิบายรูปภาพที่นี่ https://en.code-bude.net/wp-content/uploads/2013/08/md5_performance_benchmark_2.png


2
ทรัพยากรการกำหนดรุ่นเช่นนี้ (หรือโดยการฝังรุ่น / แฮชในชื่อทรัพยากร) จะมีประโยชน์มากโดยเฉพาะอย่างยิ่งเมื่อทำการปรับใช้การอัปเดตในโลกแห่งความเป็นจริงที่ไหน - ตรงข้ามกับกฎของส่วนหัวควบคุมแคช อาจมีการแคชเกิดขึ้นและผู้ใช้หลายคนไม่ทราบวิธีการรีเฟรชแคช หากคุณ (ทำให้แอปของคุณ) ขอทรัพยากรที่มีชื่อใหม่อาจไม่สามารถแคชได้
TripeHound

1
นี่ไม่ใช่การสูญเสียประสิทธิภาพครั้งใหญ่ใช่หรือไม่ การแฮชไฟล์ css และ js ทุกครั้งที่มีลิงก์ถูกแทรกในหน้า ... คุณเคยใช้การวัดสำหรับเรื่องนี้หรือไม่?
Raidri พูดว่า Reinstate Monica

2
@ Raidri Hashing ได้ทันทีอาจไม่ใช่ความคิดที่ดี (ฉันไม่ได้สังเกตว่ามันกำลังทำเช่นนี้เมื่อฉันแสดงความคิดเห็นครั้งแรก) การอัพเดตการอ้างอิงเพื่อใช้แฮชหรือเวอร์ชันระหว่างกระบวนการ build คือ
TripeHound

@Raidri ฉันมีแอพพลิเคชั่นค่อนข้างเล็กที่มี meess 20 ressources ที่ฉันแฮชและฉันไม่ได้เห็นความแตกต่างในเวลาสร้างดังนั้นฉันจึงไม่ได้พยายามที่จะอ้างอิงมาตรฐาน นอกจากนี้ฉันไม่แน่ใจว่าฉันเข้าใจประโยคที่สองของคุณ แต่ ressources ถูกแคชและเบราว์เซอร์จะทำการตรวจสอบอีกครั้งหาก hash เปลี่ยน => หากคุณเปลี่ยน ressource เอง
fred beauchamp

แฮชไม่ได้ถูกคำนวณ ณ เวลาที่สร้าง แต่ในทุก ๆ การสร้างหน้า นั่นเป็นปัญหาของเซิร์ฟเวอร์และไม่มีส่วนเกี่ยวข้องกับการแคชในเบราว์เซอร์
Raidri พูดว่า Reinstate Monica

5

ในกรณีอื่น ๆ ที่สิ่งเหล่านี้อาจเป็นไปไม่ได้ตัวอย่างเช่นต้องการบังคับให้มีการรีเฟรชบนคอมพิวเตอร์ของผู้ใช้ปลายทางที่คุณไม่สามารถเข้าถึงได้คุณสามารถผนวกหมายเลขเวอร์ชันต่อท้ายชื่อสคริปต์เป็นพารามิเตอร์การสืบค้นที่ทำให้เบราว์เซอร์ระบุ มันเป็นไฟล์อื่น กล่าวคือ example.js?v=1. โปรดจำไว้ว่าคุณจะต้องเปลี่ยนหมายเลขในแต่ละครั้งที่โหลดเพื่อบังคับ

คุณสามารถทำสิ่งนี้กับการพัฒนาในท้องถิ่น แต่วิธี dev เครื่องมือนั้นมีประสิทธิภาพมากกว่า


3

นอกเหนือจากคำตอบ @Steven เมื่อคุณเปิดคอนโซลเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์คุณสามารถคลิกขวาที่ปุ่มรีเฟรชและใช้เมนูแบบเลื่อนลง

ในเมนูนี้คุณจะได้รับตัวเลือกสำหรับ"ล้างแคชและยากโหลด"

คือสิ่งที่คุณกำลังมองหา


1
ฉันถือว่าคุณใช้ Chrome เวอร์ชันที่ไม่ใช่ภาษาอังกฤษ ฉันใช้เวอร์ชันภาษาอังกฤษและเรียกว่า "Empty Cache and Hard reload"
Nzall

1

หากคุณกำลังพัฒนาเว็บไซต์คุณควรทราบว่า Chrome ต้องการการmust-revalidateตั้งค่าCache-Controlเพื่อดึงไฟล์อย่างถูกต้องเมื่อมีการเปลี่ยนแปลงบนเซิร์ฟเวอร์

คำตอบอื่น ๆ จะบอกวิธีกด SHIFT-F5 เพื่อบังคับให้ Chrome เวอร์ชันของคุณดึงไฟล์ทั้งหมด แต่มันมีเหตุผลที่จะบอกผู้ใช้ทุกคนของเว็บไซต์ให้ทำเช่นนี้ทุกครั้งที่มีการเปลี่ยนแปลงเว็บไซต์หรือไม่ หากคุณตั้งค่าCache-Controlให้รวมmust-revalidateChrome จะตรวจสอบเพื่อดูว่ามีไฟล์ใดเปลี่ยนแปลงหรือไม่จากนั้นดาวน์โหลดอย่างถูกต้องเมื่อจำเป็น

ดูรายละเอียดได้ที่โพสต์บล็อกนี้: https://agiletribe.wordpress.com/2018/01/29/caching-for-chrome/

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