แคชชิ่ง
แคชชิ่งCache Control

Cache Control

Included in the “Power Extensions” bundle

เมื่อรัน queries กับ GraphQL server ผ่านเมธอด GET สามารถแคช GraphQL response ไว้ที่ฝั่ง client หรือในระยะกลางระหว่าง client กับ server (เช่น CDN) ได้ โดยอาศัยการแคช HTTP มาตรฐาน

วิธีนี้ทำงานได้โดยอัตโนมัติสำหรับ persisted queries ส่วน single endpoint และ custom endpoints จะทำงานโดยการต่อพ่วงพารามิเตอร์ ?query={ GraphQL query } เข้ากับ endpoint

คำอธิบาย

การแคช HTTP ทำงานโดยส่ง header Cache-Control พร้อมค่า max-age ในการตอบสนอง เพื่อระบุว่าควรแคช response ไว้นานเท่าใด

ส่วนขยาย Cache Control มี Cache Control Lists ซึ่งสามารถกำหนดค่า max-age แบบกำหนดเองสำหรับ fields และ directives ได้ ดังนั้น queries ที่แตกต่างกันซึ่งมี fields และ directives ต่างกันจะให้ค่า max-age ที่แตกต่างกัน

ค่า max-age ของ response จะถูกคำนวณโดยอัตโนมัติโดย GraphQL engine โดยค่าดังกล่าวคือค่า max-age ที่ต่ำที่สุดจาก fields และ directives ทั้งหมดใน query ที่ร้องขอ (ตามที่กำหนดใน Cache Control List) หรือเป็น no-store หากเกิดกรณีใดกรณีหนึ่งต่อไปนี้:

  • มีการรัน mutation
  • field หรือ directive ใดมีค่า max-age เป็น 0
  • กฎ Access Control ต้องตรวจสอบสถานะผู้ใช้สำหรับ field หรือ directive ใด (ในกรณีนี้ response จะเฉพาะเจาะจงกับผู้ใช้แต่ละคน จึงไม่สามารถแคชได้)

การกำหนด cache control policy

Cache Control Lists

Custom Post Type ใหม่ชื่อ "Cache Control List" จะถูกเพิ่มเข้าไปในเว็บไซต์ สามารถดูรายการได้ที่หน้า "Cache Control Lists" ในเมนู และคลิก "Add New Cache Control List" เพื่อเพิ่มรายการใหม่ในตัวแก้ไข

Cache Control Lists
Cache Control Lists

ตัวแก้ไข Cache Control List

Cache Control List แต่ละรายการประกอบด้วยรายการย่อยหนึ่งรายการขึ้นไป โดยแต่ละรายการมีองค์ประกอบดังนี้:

  • Fields และ directives ที่หากปรากฏใน GraphQL query จะทำให้ค่า max-age ที่เลือกมีผลบังคับใช้
  • ค่า max-age

Cache Control entry

หลังจากสร้าง Cache Control List แล้ว สามารถให้ endpoint ใช้งานได้โดยแก้ไข Schema Configuration ที่สอดคล้องกัน และเลือกรายการจากลิสต์ภายใต้บล็อก "Cache Control Lists"

การเลือก Cache Control List ใน Schema Configuration