การแคชรันไทม์หมายถึงการค่อยๆ เพิ่มการตอบกลับไปยังแคช "เมื่อใช้" แม้ว่าการแคชรันไทม์จะไม่ช่วยเรื่องความน่าเชื่อถือของคำขอปัจจุบัน แต่ก็ช่วยให้คำขอในอนาคตสำหรับ URL เดียวกันมีความเสถียรมากขึ้นได้
แคช HTTP ของเบราว์เซอร์เป็นตัวอย่างของการแคชรันไทม์ โดยจะมีการป้อนข้อมูลหลังคำขอสำหรับ URL ที่ระบุเท่านั้น แต่โปรแกรมทำงานของบริการให้คุณใช้การแคชรันไทม์ที่มีมากกว่าแค่แคช HTTP เพียงอย่างเดียว
การกำหนดกลยุทธ์
การแคชรันไทม์สามารถรวมการเข้าถึงเครือข่ายและแคชเข้าด้วยกันได้หลายวิธี ซึ่งตรงข้ามกับการแคชล่วงหน้า (ซึ่งจะพยายามแสดงชุดไฟล์ที่กำหนดไว้ล่วงหน้าจากแคช) โดยปกติชุดค่าผสมแต่ละชุด จะเรียกว่ากลยุทธ์การแคช กลยุทธ์การแคชที่สำคัญ ได้แก่
- เน้นเครือข่ายเป็นหลัก
- แคชเป็นหลัก
- ไม่มีอัปเดตขณะตรวจสอบใหม่
เน้นเครือข่ายเป็นหลัก
ในวิธีนี้ โปรแกรมทำงานของบริการจะพยายามเรียกข้อมูลการตอบสนองจากเครือข่ายก่อน หากคำขอเครือข่ายสำเร็จ ก็เยี่ยมเลย การตอบกลับจะส่งกลับไปยังเว็บแอปของคุณ และสำเนาของการตอบกลับจะจัดเก็บโดยใช้ Cache Storage API ไม่ว่าจะสร้างรายการใหม่หรืออัปเดตรายการก่อนหน้าสำหรับ URL เดียวกัน
หากคำขอของเครือข่ายล้มเหลวทั้งหมด หรือใช้เวลานานเกินไปในการส่งคืนการตอบกลับ ระบบจะส่งการตอบกลับล่าสุดจากแคชแทน
แคชเป็นหลัก
กลยุทธ์แบบเน้นแคชเป็นหลัก ตรงข้ามกับการใช้เครือข่ายเป็นหลัก ในวิธีการนี้ เมื่อ Service Worker สกัดกั้นคำขอ โปรแกรมจะใช้ Cache Storage API ก่อนเพื่อดูว่ามีการตอบกลับที่แคชไว้หรือไม่ หากมี ระบบจะส่งการตอบสนองดังกล่าวไปยังเว็บแอป
หากระบบไม่พบแคช โปรแกรมทำงานของบริการจะไปที่เครือข่ายและพยายามเรียกคืนการตอบกลับจากที่นั่น สมมติว่าคำขอเครือข่ายสำเร็จ ระบบจะส่งกลับไปที่เว็บแอปของคุณและบันทึกสำเนาไว้ในแคช สำเนาที่แคชไว้นี้จะใช้เพื่อข้ามเครือข่ายในครั้งต่อไปที่มีการส่งคำขอสำหรับ URL เดียวกัน
ไม่มีอัปเดตขณะตรวจสอบใหม่
ข้อมูลที่ไม่มีอัปเดตขณะตรวจสอบใหม่เป็นวิธีการแบบผสม เมื่อใช้งาน โปรแกรมทำงานของบริการจะตรวจสอบคำตอบที่แคชไว้ทันที และหากพบคำตอบก็จะส่งกลับไปที่เว็บแอปของคุณ
ในระหว่างนี้ ไม่ว่าจะมีแคชตรงกันหรือไม่ โปรแกรมทำงานของบริการจะเริ่มส่งคำขอเครือข่ายเพื่อรับคำตอบ "ใหม่" กลับมาด้วย การตอบกลับนี้ใช้เพื่ออัปเดตการตอบกลับที่แคชไว้ก่อนหน้านี้ หากการตรวจสอบแคชในเบื้องต้นพลาดไป ระบบจะส่งสำเนาของการตอบสนองของเครือข่ายกลับไปยังเว็บแอปด้วย
เหตุใดจึงควรใช้ Workbox
กลยุทธ์การแคชเหล่านี้มาจากสูตรอาหารที่ปกติคุณจะต้องเขียนใหม่ในโปรแกรมทำงานของบริการของคุณเองซ้ำแล้วซ้ำอีก แทนที่จะทำเช่นนั้น Workbox ให้คุณนำ Workbox มาเป็นแพ็กเกจไว้เป็นส่วนหนึ่งของไลบรารีกลยุทธ์ ซึ่งคุณสามารถนำไปใช้ใน Service Worker ได้
นอกจากนี้ Workbox ยังรองรับการกำหนดเวอร์ชัน ซึ่งทำให้คุณหมดอายุในรายการที่แคชไว้โดยอัตโนมัติ หรือแจ้งเตือนเว็บแอปเมื่อมีการอัปเดตรายการที่แคชไว้ก่อนหน้านี้ได้
คุณควรแคชเนื้อหาใดโดยใช้กลยุทธ์ใด
มองว่าการแคชรันไทม์ช่วยเสริมการแคชล่วงหน้าได้ หากเนื้อหาทั้งหมดของคุณมีการแคชล่วงหน้าอยู่แล้ว ก็เพียงแค่นี้ก็เรียบร้อย ไม่จำเป็นต้องแคชเนื้อหาในระหว่างรันไทม์ แต่สำหรับเว็บแอปที่ค่อนข้างซับซ้อน คุณคงไม่ต้องทำการแคชทุกอย่างไว้ก่อน
ไฟล์สื่อขนาดใหญ่ เนื้อหาที่แสดงจากโฮสต์ของบุคคลที่สาม เช่น CDN หรือการตอบสนองจาก API เป็นเพียงตัวอย่างบางส่วนของประเภทเนื้อหาที่ไม่สามารถทำการแคชล่วงหน้าได้อย่างมีประสิทธิภาพ ใช้แผง "เครือข่าย" ในเครื่องมือสำหรับนักพัฒนาเว็บเพื่อระบุคำขอที่อยู่ในหมวดหมู่นี้ และสำหรับแต่ละรายการ ลองพิจารณาว่าความใหม่กับความน่าเชื่อถือแบบใดเหมาะสม
ใช้ "ไม่มีอัปเดตขณะตรวจสอบใหม่" เพื่อให้ความสำคัญกับความน่าเชื่อถือมากกว่าความใหม่
เนื่องจากกลยุทธ์ที่ไม่มีการอัปเดตขณะตรวจสอบอีกครั้งจะส่งคืนการตอบกลับที่แคชไว้เกือบจะทันที หลังจากที่ระบบป้อนแคชผ่านคำขอแรกแล้ว คุณจึงจะเห็นประสิทธิภาพที่รวดเร็วและเชื่อถือได้เมื่อใช้กลยุทธ์นี้ ซึ่งมาพร้อมกับข้อดีที่ต้องแลกกับการรับข้อมูลการตอบกลับซึ่งอาจเก่าเกินไปเมื่อเทียบกับข้อมูลที่ดึงมาจากเครือข่าย การใช้กลยุทธ์นี้ได้ผลดีที่สุดสำหรับเนื้อหาอย่างรูปภาพโปรไฟล์ผู้ใช้หรือคำตอบจาก API เริ่มต้นที่ใช้ในการสร้างมุมมอง เมื่อคุณทราบว่าการแสดงบางสิ่งทันทีคือกุญแจสำคัญ แม้ว่าจะเป็นค่าเก่าก็ตาม
ใช้เครือข่ายเป็นหลักเพื่อให้ความสำคัญกับความใหม่มากกว่าความน่าเชื่อถือ
ในบางสถานการณ์ การใช้กลยุทธ์ที่เน้นเครือข่ายเป็นหลักคือการยอมรับความพ่ายแพ้ในการต่อสู้ของคุณกับเครือข่าย ซึ่งเป็นเรื่องที่สำคัญมาก แต่ก็นำมาซึ่งความไม่แน่นอนเกี่ยวกับความน่าเชื่อถือ สำหรับเนื้อหาบางประเภท การดูคำตอบใหม่จะดีกว่า เมื่อต้องการรับข้อมูลเก่า คุณอาจต้องการความใหม่เมื่อส่งคำขอ API สำหรับข้อความของบทความที่มีการอัปเดตเป็นประจำ เช่น
การใช้กลยุทธ์ที่ให้ความสำคัญกับเครือข่ายเป็นอันดับแรกภายในโปรแกรมทำงานของบริการ (Service Worker) แทนการมุ่งโต้ตอบกับเครือข่ายโดยตรงจะช่วยให้คุณได้รับประโยชน์จากการกลับไปทำบางอย่างได้ แม้ว่าจะเป็นการตอบกลับที่อาจล้าสมัยก็ตาม คุณอาจทำงานได้ไม่เสถียร แต่อย่างน้อยคุณก็ยังเสถียรได้ขณะออฟไลน์
ใช้แคชเป็นหลักสำหรับ URL ที่มีการกำหนดเวอร์ชัน
ในกลยุทธ์ที่เน้นแคชเป็นอันดับแรก เมื่อมีการแคชรายการแล้ว ระบบจะไม่อัปเดตรายการนั้น ดังนั้น ตรวจสอบให้แน่ใจว่าคุณใช้ชิ้นงานดังกล่าวกับชิ้นงานที่คุณทราบว่าไม่น่าจะมีการเปลี่ยนแปลงเท่านั้น โดยเฉพาะอย่างยิ่ง URL ประเภทนี้จะทำงานได้ดีที่สุดกับ URL ที่มีข้อมูลการกำหนดเวอร์ชัน ซึ่งเป็น URL ประเภทเดียวกันที่ควรแสดงโดยมีส่วนหัวการตอบกลับ Cache-Control: max-age=31536000
ด้วย