มีวิธีแคชมากกว่าหนึ่งวิธี
รับเงื่อนไข
หากคุณกำลังจัดเก็บภาพเหล่านี้บนระบบไฟล์และให้บริการพวกเขาโดยตรงผ่านเว็บเซิร์ฟเวอร์คุณอาจจะใช้อยู่แล้วได้รับเงื่อนไข เว็บเซิร์ฟเวอร์จะใช้ข้อมูลเมตาของระบบไฟล์โดยอัตโนมัติเพื่อตั้งค่าส่วนหัว ETAG และจะตอบกลับโดยอัตโนมัติด้วย "304 Not Modified" หากเบราว์เซอร์มีIf-Modified-Since
หรือรวมIf-Matches
ส่วนหัวไว้ในคำขอ (เบราว์เซอร์ทั้งหมดจะ)
ในกรณีนี้ภาพทั้งหมดจะไม่ถูกนำเสนอกลับดังนั้นคุณจึงประหยัดแบนด์วิดท์ได้ อย่างไรก็ตามคำขอ GET จะยังคงออกดังนั้นคุณจะยังคงมีค่าใช้จ่ายและความล่าช้าของการร้องขอ
คุณสามารถลดจำนวนการร้องขอเล็กน้อยโดยเสียค่าใช้จ่ายของความสดแคชโดยให้เว็บเซิร์ฟเวอร์ของคุณตั้งค่าCache-Control
ส่วนหัวด้วยpublic,max-age=N
ค่าสำหรับรูปภาพของคุณ สิ่งนี้บอกว่าแคชสามารถเก็บทรัพยากรได้นานไม่max-age
กี่วินาทีก่อนที่พวกเขาจะต้องตรวจสอบว่ามีการอัพเดทหรือไม่
อย่างไรก็ตาม HTTP จะกำหนดวิธีเดียวในการทำให้รายการแคชไม่ถูกต้องซึ่งอาจไม่ตรงกับความหมายของแอปพลิเคชันของคุณ: หากคุณโพสต์หรือ PUT ไปยัง URL ที่อัปเดตรูปโปรไฟล์ให้ตอบกลับด้วยLocation: [url of photo]
ส่วนหัวและรายการแคชสำหรับ URL นั้น
(นี่เป็นกลไกที่ช่วยให้คุณสามารถแคชหน้าเว็บที่มีความคิดเห็นแล้วให้โหลดหน้าเว็บใหม่โดยเบราว์เซอร์หลังจากผู้ใช้โพสต์ความคิดเห็นใหม่เบราว์เซอร์จะตอบกลับPOST /comment
ด้วย303 See Other
และ a Location: /page/with/comment
โปรดทราบว่าสิ่งนี้ไม่ได้ใช้ ทำงานใน Firefox เนื่องจากข้อผิดพลาดที่ยาวนาน )
หากคุณไม่มีปริมาณข้อมูลมากวิธีการนี้จะใช้แคชได้ดี
เปลี่ยน URL
URL คือการแสดงของทรัพยากรดังนั้นวิธีการจัดการแคชไม่ใช่การเปลี่ยนพารามิเตอร์แคชสำหรับทรัพยากร แต่เป็นการสร้างทรัพยากรใหม่ด้วยคำสั่ง "แคชถาวร" นี่คือวิธีการที่ว่า "ชายใหญ่" ชอบเพราะมันช่วยให้พวกเขาในการสร้างไม่มีการร้องขอพิเศษบันทึกพวกเขาจำนวนมากของแบนด์วิดธ์ ข้อเสียคือมันต้องมีการทำบัญชีเพิ่มเติมมากขึ้น
มีสองเทคนิคทั่วไปสำหรับการนี้
สตริงการสืบค้น
เว็บเซิร์ฟเวอร์ละเว้นสตริงการสืบค้นเมื่อให้บริการไฟล์จากระบบไฟล์ อย่างไรก็ตามแคชไม่ได้: /1.jpg?t=12345
และ/1.jpg?t=67890
เป็นทรัพยากรที่แตกต่างกันสองอย่างที่ไม่เกี่ยวข้องกันอย่างสมบูรณ์แม้ว่าเซิร์ฟเวอร์จะคิดเหมือนกันก็ตาม
ดังนั้นสิ่งหนึ่งที่ง่ายที่คุณสามารถทำได้คือเพิ่มการประทับเวลาของระบบไฟล์เป็นสตริงการสืบค้นทุกครั้งที่คุณทำการอ้างอิงไปยังแหล่งข้อมูลใน html ของคุณและตั้งค่าExpires
ส่วนหัวที่ยาว เบราว์เซอร์จะทำการแคชทรัพยากรนี้ตลอดไปและจะไม่ทำการใด ๆตราบใดที่สตริงการสืบค้นไม่เปลี่ยนแปลง
ข้อเสียคือมันเป็นเรื่องยากหรือเป็นไปไม่ได้ที่จะสั่งให้เว็บเซิร์ฟเวอร์ของ URL ใหม่สำหรับรายการหากคุณต้องการบังคับให้แคชใช้ไม่ได้ ตัวอย่างเช่นหากเบราว์เซอร์ที่มีหน้า HTML เก็บไว้ชั่วคราวที่มี/1.jpg?v=1
การอ้างอิง แต่เกิดขึ้นเพื่อล้างรายการสำหรับ/1.jpg?v=1
(บางทีมันอาจจะวิ่งออกมาจากไฟล์หรือพื้นที่หน่วยความจำ) /1.jpg?v=1
ก็จะทำให้คำขอใหม่เพื่อ หากในขณะเดียวกันภาพได้เปลี่ยน/1.jpg?v=2
เป็นการตอบสนองที่เหมาะสมคือ:
- ให้บริการไฟล์เวอร์ชันเก่า คุณจะทำเช่นนี้หากคุณต้องการให้ทรัพยากรทั้งหมดสอดคล้องกันเหมือนอยู่ในช่วงเวลาหนึ่ง นี่คือสิ่งที่คุณควรทำกับไฟล์ CSS เช่นเนื่องจากไฟล์ css ใหม่ที่มีไฟล์ html เก่าอาจทำงานไม่ถูกต้อง!
301 Moved Permanently
เปลี่ยนเส้นทางไปยังรุ่นใหม่ของไฟล์โดยใช้ คุณจะทำเช่นนี้หากคุณต้องการให้ทรัพยากรทั้งหมดเป็นทรัพยากรใหม่
ทั้งสองอย่างนี้ทำได้ยากด้วย webserver เพียงอย่างเดียวซึ่งหมายความว่าคุณต้องเรียกใช้งานเว็บแอพพลิเคชั่นแม้จะมีการร้องขอรูปภาพซึ่งอาจซับซ้อนและใช้ทรัพยากรมากขึ้น Webservers ทำงานเร็วมากในการให้บริการไฟล์ดังนั้นค่าใช้จ่ายของแอปพลิเคชันบนเว็บอาจจบลงด้วยการกลืนแบนด์วิดท์และเวลาแฝงที่เพิ่มขึ้น
ชื่อไฟล์
แทนที่จะเพิ่มสตริงแบบสอบถามคุณเปลี่ยนชื่อไฟล์ ซึ่งหมายความว่าง่ายต่อการเก็บไฟล์หลายเวอร์ชันในระบบไฟล์ แต่คุณอาจจะต้องเก็บข้อมูลเมตาของไฟล์และทำการเก็บฐานข้อมูลอื่น ๆ เพื่อติดตามทรัพยากรและชื่อของพวกเขา