การแคช Service Worker และการแคช HTTP

ข้อดีและข้อเสียของการใช้ตรรกะการหมดอายุที่สอดคล้องกันหรือแตกต่างกันในแคชของ Service Worker และเลเยอร์แคช HTTP

ในขณะที่ Service Worker และ PWA กลายเป็นมาตรฐานของเว็บแอปพลิเคชันสมัยใหม่ การแคชทรัพยากร มีความซับซ้อนมากขึ้น บทความนี้ครอบคลุมภาพรวมของการแคชเบราว์เซอร์ ซึ่งรวมถึง

  • กรณีการใช้งานและความแตกต่างระหว่างการแคชของ Service Worker และการแคช HTTP
  • ข้อดีและข้อเสียของกลยุทธ์การหมดอายุการแคชของ Service Worker เมื่อเทียบกับแบบปกติ กลยุทธ์การแคช HTTP

ภาพรวมของขั้นตอนการแคช

ในระดับสูง เบราว์เซอร์จะทำตามลำดับการแคชด้านล่างเมื่อขอทรัพยากร

  1. แคชของ Service Worker: โปรแกรมทำงานของบริการจะตรวจสอบว่าทรัพยากรอยู่ในแคชหรือไม่ และ ตัดสินใจว่าจะส่งคืนทรัพยากรตัวเองตามกลยุทธ์การแคชที่ตั้งโปรแกรมไว้หรือไม่ หมายเหตุ เหตุการณ์นี้จะไม่เกิดขึ้นโดยอัตโนมัติ คุณต้องสร้างเครื่องจัดการเหตุการณ์การดึงข้อมูลใน Service Worker และสกัดกั้นคำขอของเครือข่ายเพื่อให้บริการคำขอจากบริการ แทนเครือข่าย
  2. แคช HTTP (หรือที่เรียกว่าแคชของเบราว์เซอร์): หากพบทรัพยากรใน HTTP แคชไว้ และยังไม่หมดอายุ เบราว์เซอร์จะใช้ จากแคช HTTP
  3. ฝั่งเซิร์ฟเวอร์: หากไม่พบในแคชของ Service Worker หรือแคช HTTP ระบบจะดำเนินการ ไปยังเครือข่ายเพื่อขอทรัพยากร หากไม่ได้แคชทรัพยากรไว้ใน CDN ระบบจะกำหนดค่า คำขอจะต้องกลับไปที่เซิร์ฟเวอร์ต้นทางทั้งหมด

ขั้นตอนการแคช

เลเยอร์การแคช

การแคชโปรแกรมทำงานของบริการ

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

การควบคุมแคชของ Service Worker

โปรแกรมทำงานของบริการสกัดคำขอ HTTP ด้วย เหตุการณ์ Listener (โดยปกติจะเป็นเหตุการณ์ fetch) ช่วงเวลานี้ ข้อมูลโค้ดแสดงตรรกะของ แคชก่อน ในการแคช

แผนภาพแสดงวิธีที่ Service Worker สกัดกั้นคำขอ HTTP

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

import {registerRoute} from 'workbox-routing';

registerRoute(new RegExp('styles/.*\\.css'), callbackHandler);

กลยุทธ์การแคชและกรณีการใช้งานของโปรแกรมทำงานของบริการ

ตารางถัดไปจะสรุปกลยุทธ์การแคชโปรแกรมทำงานของบริการทั่วไปและสถานการณ์ที่แต่ละกลยุทธ์จะเป็นประโยชน์

กลยุทธ์ เหตุผลของความใหม่ กรณีการใช้งาน
เครือข่าย เท่านั้น เนื้อหาต้องเป็นปัจจุบันอยู่เสมอ
  • การชำระเงินและการชำระเงิน
  • ใบแจ้งยอดคงเหลือ
เครือข่าย กลับไปใช้แคช แนะนำให้แสดงเนื้อหาใหม่ แต่หากเครือข่ายล้มเหลวหรือไม่เสถียร ที่อนุญาตให้แสดงเนื้อหาเก่าเล็กน้อย
  • ข้อมูลที่เป็นปัจจุบัน
  • ราคาและอัตรา (ต้องระบุข้อจำกัดความรับผิด)
  • สถานะการสั่งซื้อ
ไม่มีอัปเดตขณะตรวจสอบความถูกต้องอีกครั้ง คุณจะแสดงเนื้อหาที่แคชไว้ได้ทันที แต่ควรใช้เนื้อหาที่แคชที่อัปเดตใน ในอนาคต
  • ฟีดข่าว
  • หน้ารายการผลิตภัณฑ์
  • ข้อความ
แคชก่อน เปลี่ยนไปใช้เครือข่ายอีกครั้ง เนื้อหาไม่สำคัญและสามารถแสดงจากแคชเพื่อประสิทธิภาพที่ดีขึ้น แต่ Service Worker ควรตรวจหาการอัปเดตเป็นครั้งคราว
  • App Shell
  • แหล่งข้อมูลทั่วไป
แคชเท่านั้น เนื้อหาแทบจะไม่มีการเปลี่ยนแปลง
  • เนื้อหาคงที่

ประโยชน์เพิ่มเติมของการแคชของ Service Worker

นอกจากการควบคุมตรรกะการแคชแบบละเอียดแล้ว การแคชของ Service Worker ยังมีประโยชน์ดังนี้

  • หน่วยความจำและพื้นที่เก็บข้อมูลมากขึ้นสำหรับต้นทาง: เบราว์เซอร์จัดสรรแคช HTTP ตามต้นทาง ในอีก ถ้าคุณมีโดเมนย่อยหลายโดเมน ทุกคำจะใช้แคช HTTP เดียวกัน ไม่มี ให้รับประกันว่าเนื้อหาของต้นทาง/โดเมนจะอยู่ในแคช HTTP เป็นเวลานาน สำหรับ ตัวอย่างเช่น ผู้ใช้อาจล้างแคชอย่างถาวรได้โดยการล้างข้อมูลด้วยตนเองจาก UI การตั้งค่าของเบราว์เซอร์ หรือ การฮาร์ดรีโหลดบนหน้า คุณมีแคชของ Service Worker ที่สูงกว่า แนวโน้มที่เนื้อหาที่แคชไว้ของคุณจะมีการแคชไว้ ดูคงที่ เพื่อดูข้อมูลเพิ่มเติม
  • ความยืดหยุ่นที่มากขึ้นสำหรับเครือข่ายที่ไม่สม่ำเสมอหรือการใช้งานแบบออฟไลน์: ด้วยแคช HTTP คุณจะ ให้ใช้ไบนารีทางเลือกเท่านั้น นั่นคือแคชทรัพยากรไว้ หรือไม่ก็แคช มีการแคชของ Service Worker ช่วยลด "อาการสะอึก" เล็กๆ น้อยๆ ได้ ง่ายขึ้นมาก (ด้วยกลยุทธ์ "ไม่มีอัปเดตขณะตรวจสอบความถูกต้องอีกครั้ง") นำเสนอประสบการณ์แบบออฟไลน์ที่สมบูรณ์ (ด้วยกลยุทธ์ "แคชเท่านั้น") หรือแม้แต่เนื้อหา ระหว่าง UI ที่กำหนดเองโดยมีส่วนต่างๆ ของหน้าเว็บมาจากแคชของ Service Worker ยกเว้นบางส่วน (โดยใช้กลยุทธ์ "ตั้งค่าตัวแฮนเดิล") ตามความเหมาะสม

การแคช HTTP

ครั้งแรกที่เบราว์เซอร์โหลดหน้าเว็บและทรัพยากรที่เกี่ยวข้อง เบราว์เซอร์จะจัดเก็บทรัพยากรเหล่านี้ แคช HTTP เบราว์เซอร์มักจะเปิดใช้แคช HTTP โดยอัตโนมัติ เว้นแต่ว่า ปิดใช้อย่างชัดแจ้งโดยผู้ใช้ปลายทาง

การใช้การแคช HTTP หมายถึงการใช้เซิร์ฟเวอร์ในการพิจารณาว่าจะแคชแหล่งข้อมูลเมื่อใดและอย่างไร ยาว

ควบคุมการหมดอายุของแคช HTTP ด้วยส่วนหัวการตอบกลับ HTTP

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

กลยุทธ์การแคช HTTP และกรณีการใช้งาน

การแคช HTTP นั้นง่ายกว่าการแคชของ Service Worker มาก เนื่องจากการแคช HTTP จะมีผลเฉพาะกับ ตรรกะการหมดอายุของทรัพยากรที่อิงตามเวลา (TTL) โปรดดู คุณควรใช้ค่าส่วนหัวการตอบกลับใด และสรุปเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับกลยุทธ์การแคช HTTP

การออกแบบตรรกะการหมดอายุของแคช

ส่วนนี้อธิบายข้อดีและข้อเสียของการใช้ตรรกะการหมดอายุที่สอดคล้องกันใน Service Worker แคชและเลเยอร์แคช HTTP รวมถึงข้อดีและข้อเสียของตรรกะการหมดอายุที่แยกกัน หลายเลเยอร์

ภาพ Glitch ด้านล่างแสดงให้เห็นการทำงานของการแคชและการแคช HTTP ของ Service Worker ใน ในสถานการณ์ต่างๆ ดังนี้

ตรรกะการหมดอายุที่สอดคล้องกันสำหรับเลเยอร์แคชทั้งหมด

เพื่อแสดงให้เห็นถึงข้อดีและข้อเสีย เราจะดู 3 สถานการณ์ ได้แก่ ระยะยาว ระยะกลาง และ ในระยะสั้น

สถานการณ์ การแคชระยะยาว การแคชระยะกลาง การแคชระยะสั้น
กลยุทธ์การแคชโปรแกรมทำงานของบริการ แคช กลับไปใช้เครือข่าย ไม่มีอัปเดตขณะตรวจสอบความถูกต้องอีกครั้ง เครือข่ายกลับไปใช้แคช
TTL แคชของ Service Worker 30 วัน 1 วัน 10 นาที
อายุสูงสุดของแคช HTTP 30 วัน 1 วัน 10 นาที

สถานการณ์: การแคชระยะยาว (แคช กลับไปใช้เครือข่าย)

  • เมื่อทรัพยากรที่แคชไว้ถูกต้อง (<= 30 วัน): Service Worker จะแสดงแคช ทรัพยากรได้ทันทีโดยไม่ต้องไปที่เครือข่าย
  • เมื่อทรัพยากรที่แคชไว้หมดอายุ (มากกว่า 30 วัน): Service Worker จะไปที่เครือข่ายเพื่อ เพื่อดึงทรัพยากร เบราว์เซอร์ไม่มีสำเนาของแหล่งข้อมูลในแคช HTTP ดังนั้น ไปยังฝั่งเซิร์ฟเวอร์สำหรับทรัพยากร

ข้อเสีย: ในสถานการณ์นี้ การแคช HTTP จะให้ค่าน้อยกว่า เนื่องจากเบราว์เซอร์จะ ส่งคำขอไปยังฝั่งเซิร์ฟเวอร์เมื่อแคชหมดอายุใน Service Worker

สถานการณ์: การแคชระยะกลาง (ไม่มีอัปเดตขณะตรวจสอบความถูกต้องอีกครั้ง)

  • เมื่อทรัพยากรที่แคชไว้ถูกต้อง (<= 1 วัน): Service Worker จะแสดงแคช ทรัพยากรโดยทันที และไปที่เครือข่ายเพื่อดึงข้อมูลทรัพยากร เบราว์เซอร์มีสำเนาของ ทรัพยากรในแคช HTTP จึงส่งคืนสำเนานั้นไปยัง Service Worker
  • เมื่อทรัพยากรที่แคชไว้หมดอายุ (มากกว่า 1 วัน): Service Worker จะแสดงแคช ทรัพยากรโดยทันที และไปที่เครือข่ายเพื่อดึงข้อมูลทรัพยากร เบราว์เซอร์ไม่มี สำเนาของทรัพยากรในแคช HTTP จึงส่งไปฝั่งเซิร์ฟเวอร์เพื่อดึงข้อมูลทรัพยากรนั้น

ข้อเสีย: โปรแกรมทำงานของบริการต้องการการป้องกันแคชเพิ่มเติมเพื่อลบล้างแคช HTTP ใน เพื่อใช้ประโยชน์จาก "ตรวจสอบความถูกต้องอีกครั้ง" ครั้งแรก

สถานการณ์: การแคชระยะสั้น (เครือข่ายกลับไปใช้แคช)

  • เมื่อทรัพยากรที่แคชไว้ถูกต้อง (<= 10 นาที): Service Worker จะไปที่เครือข่าย เพื่อดึงข้อมูลทรัพยากร เบราว์เซอร์มีสำเนาของทรัพยากรในแคช HTTP ดังนั้นเบราว์เซอร์จึงส่งคืน ให้กับโปรแกรมทำงานของบริการได้โดยไม่ต้องไปที่ฝั่งเซิร์ฟเวอร์
  • เมื่อทรัพยากรที่แคชไว้หมดอายุ (นานกว่า 10 นาที): Service Worker จะแสดงแคช ทรัพยากรโดยทันที และไปที่เครือข่ายเพื่อดึงข้อมูลทรัพยากร เบราว์เซอร์ไม่มี สำเนาของทรัพยากรในแคช HTTP จึงส่งไปฝั่งเซิร์ฟเวอร์เพื่อดึงข้อมูลทรัพยากรนั้น

ข้อเสีย: เช่นเดียวกับสถานการณ์การแคชระยะกลาง โปรแกรมทำงานของบริการต้องการเพิ่มเติม ตรรกะการป้องกันแคชเพื่อลบล้างแคช HTTP เพื่อดึงข้อมูลทรัพยากรล่าสุดจาก ฝั่งเซิร์ฟเวอร์

Service Worker ในทุกสถานการณ์

ในทุกสถานการณ์ แคชของ Service Worker จะยังคงแสดงผลทรัพยากรที่แคชไว้เมื่อเครือข่าย ไม่เสถียร ในทางกลับกัน แคช HTTP ไม่น่าเชื่อถือเมื่อเครือข่ายไม่เสถียรหรือล่ม

ตรรกะการหมดอายุของแคชที่แตกต่างกันที่แคชของ Service Worker และเลเยอร์ HTTP

เพื่อแสดงให้เห็นถึงข้อดีและข้อเสีย เราจะดูระยะสั้น ระยะกลาง และระยะสั้นอีกครั้ง สถานการณ์

สถานการณ์ การแคชระยะยาว การแคชระยะกลาง การแคชระยะสั้น
กลยุทธ์การแคชโปรแกรมทำงานของบริการ แคช กลับไปใช้เครือข่าย ไม่มีอัปเดตขณะตรวจสอบความถูกต้องอีกครั้ง เครือข่ายกลับไปใช้แคช
TTL แคชของ Service Worker 90 วัน 30 วัน 1 วัน
อายุสูงสุดของแคช HTTP 30 วัน 1 วัน 10 นาที

สถานการณ์: การแคชระยะยาว (แคช กลับไปใช้เครือข่าย)

  • เมื่อทรัพยากรที่แคชไว้ในแคชของ Service Worker ถูกต้อง (<= 90 วัน): บริการ ส่งคืนทรัพยากรที่แคชไว้ทันที
  • เมื่อทรัพยากรที่แคชไว้หมดอายุในแคชของ Service Worker (มากกว่า 90 วัน): บริการ ผู้ปฏิบัติงานไปยังเครือข่ายเพื่อดึงข้อมูลทรัพยากร เบราว์เซอร์ไม่มีสำเนาของ ในแคช HTTP จึงย้ายไปฝั่งเซิร์ฟเวอร์

ข้อดีและข้อเสีย

  • ข้อดี: ผู้ใช้จะได้รับการตอบสนองทันทีเมื่อโปรแกรมทำงานของบริการส่งคืนทรัพยากรที่แคชไว้ ทันที
  • ข้อดี: โปรแกรมทำงานของบริการมีการควบคุมที่ละเอียดมากขึ้นว่าจะใช้แคชเมื่อใดและเมื่อใด เพื่อขอทรัพยากรเวอร์ชันใหม่
  • ข้อเสีย: ต้องมีกลยุทธ์การแคชโปรแกรมทำงานของบริการที่กำหนดไว้เป็นอย่างดี

สถานการณ์: การแคชช่วงกลางภาค (ไม่มีอัปเดตขณะตรวจสอบความถูกต้องอีกครั้ง)

  • เมื่อทรัพยากรที่แคชไว้ในแคชของ Service Worker ถูกต้อง (<= 30 วัน): บริการ ส่งคืนทรัพยากรที่แคชไว้ทันที
  • เมื่อทรัพยากรที่แคชไว้หมดอายุในแคชของ Service Worker (มากกว่า 30 วัน): บริการ ไปที่เครือข่ายสำหรับทรัพยากร เบราว์เซอร์ไม่มีสำเนาของแหล่งข้อมูลใน แคช HTTP จึงไปที่ฝั่งเซิร์ฟเวอร์

ข้อดีและข้อเสีย

  • ข้อดี: ผู้ใช้จะได้รับการตอบสนองทันทีเมื่อโปรแกรมทำงานของบริการส่งคืนทรัพยากรที่แคชไว้ ทันที
  • ข้อดี: โปรแกรมทำงานของบริการสามารถดูแลให้คำขอถัดไปสำหรับ URL ที่ระบุใช้ การตอบสนองใหม่จากเครือข่ายเพราะการตรวจสอบความถูกต้องอีกครั้งที่เกิดขึ้น "ในเบื้องหลัง"
  • ข้อเสีย: ต้องมีกลยุทธ์การแคชโปรแกรมทำงานของบริการที่กำหนดไว้เป็นอย่างดี

สถานการณ์: การแคชระยะสั้น (เครือข่ายกลับไปใช้แคช)

  • เมื่อทรัพยากรที่แคชไว้ในแคชของ Service Worker ถูกต้อง (<= 1 วัน): บริการ ไปที่เครือข่ายสำหรับทรัพยากร เบราว์เซอร์ส่งคืนทรัพยากรจาก HTTP หากมี หากเครือข่ายไม่ทำงาน โปรแกรมทำงานของบริการจะส่งคืนทรัพยากรจาก แคชของ Service Worker
  • เมื่อทรัพยากรที่แคชไว้หมดอายุในแคชของ Service Worker (> 1 วัน): บริการ ผู้ปฏิบัติงานไปยังเครือข่ายเพื่อดึงข้อมูลทรัพยากร เบราว์เซอร์จะดึงทรัพยากรผ่าน เป็นเวอร์ชันที่แคชไว้ในแคช HTTP ของเครือข่ายแล้ว

ข้อดีและข้อเสีย

  • ข้อดี: เมื่อเครือข่ายไม่เสถียรหรือไม่ทำงาน โปรแกรมทำงานของบริการจะแสดงผลแคช ทรัพยากรได้ทันที
  • ข้อเสีย: โปรแกรมทำงานของบริการต้องการการป้องกันแคชเพิ่มเติมเพื่อลบล้างแคช HTTP และ สร้าง "เครือข่ายเป็นอันดับแรก" คำขอ

บทสรุป

ไม่สามารถออกแบบกฎเดียวได้ เนื่องจากความซับซ้อนของการใช้สถานการณ์การแคชร่วมกัน ที่ครอบคลุมทุกกรณี อย่างไรก็ตาม จากข้อมูลที่ค้นพบในส่วนก่อนหน้านี้ มี คำแนะนำที่ควรพิจารณาเมื่อออกแบบกลยุทธ์การใช้แคชของคุณ:

  • ตรรกะการแคชของ Service Worker ไม่จำเป็นต้องสอดคล้องกับการหมดอายุการแคช HTTP หากเป็นไปได้ ให้ใช้ตรรกะการหมดอายุที่นานขึ้นใน Service Worker เพื่อให้สิทธิ์โปรแกรมทำงาน ควบคุมได้มากขึ้น
  • การแคช HTTP ยังคงมีบทบาทสำคัญ แต่จะไม่เชื่อถือได้เมื่อเครือข่าย ไม่เสถียรหรือใช้งานไม่ได้
  • กลับไปดูกลยุทธ์การแคชสำหรับทรัพยากรแต่ละรายการเพื่อให้แน่ใจว่าการแคชโปรแกรมทำงานของบริการ จะให้ค่าโดยไม่ขัดแย้งกับแคช HTTP

ดูข้อมูลเพิ่มเติม