0Pricing
React Academy · บทเรียน

แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่

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

แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่ เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

SWR ย่อมาจากอะไร

SWR ย่อมาจาก Stale-While-Revalidate ซึ่งเป็นกลยุทธ์แคช HTTP ที่กำหนดไว้ใน RFC 5861 กลยุทธ์นี้คือให้ส่งข้อมูลเก่าที่แคชไว้ให้ผู้ใช้ทันที จากนั้นตรวจสอบข้อมูลใหม่เบื้องหลัง และอัปเดตส่วนติดต่อผู้ใช้เมื่อข้อมูลล่าสุดมาถึง

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

ประโยชน์ต่อประสบการณ์ผู้ใช้

ในรูปแบบการโหลดแบบดั้งเดิม ผู้ใช้จะเห็นวงแหวนแสดงการโหลดทุกครั้งที่เปลี่ยนหน้า แต่เมื่อใช้ SWR ผู้ใช้จะเห็นข้อมูลล่าสุดที่ทราบทันที และส่วนติดต่อผู้ใช้จะอัปเดตอย่างเงียบ ๆ เบื้องหลังหากข้อมูลเปลี่ยนแปลง

ทำให้แอปพลิเคชันรู้สึกเร็วขึ้นอย่างเห็นได้ชัด และลดการรบกวนทางความคิดจากสถานะการโหลด

เมื่อ SWR เริ่มตรวจสอบข้อมูลใหม่

SWR จะตรวจสอบข้อมูลใหม่โดยอัตโนมัติเมื่อ: หน้าต่างเบราว์เซอร์กลับมาอยู่ในโฟกัส (ผู้ใช้สลับแท็บแล้วกลับมา) การเชื่อมต่อเครือข่ายกลับมาใช้งานได้หลังออฟไลน์ มีการเรียกใช้ mutate() อย่างชัดเจน หรือเวลาของตัวจับ refreshInterval ที่กำหนดค่าได้หมดลง

ตัวกระตุ้นอัตโนมัติเหล่านี้ช่วยให้ข้อมูลเป็นปัจจุบันโดยไม่ต้องให้นักพัฒนาจัดการตรรกะการดึงข้อมูลใหม่ด้วยตนเอง

เครื่องสถานะของ SWR

คีย์ของ SWR สามารถอยู่ในสถานะใดสถานะหนึ่งจากหลายสถานะ ได้แก่ กำลังโหลด (ยังไม่มีข้อมูลแคชและกำลังดึงข้อมูลครั้งแรก) กำลังตรวจสอบข้อมูลใหม่ (มีข้อมูลแคชและกำลังรีเฟรชเบื้องหลัง) เกิดข้อผิดพลาด (คำขอล้มเหลว) หรือสำเร็จ (มีข้อมูลล่าสุดพร้อมใช้งาน)

การเข้าใจสถานะเหล่านี้ช่วยให้คุณสร้างโครงร่างขณะโหลดและส่วนติดต่อผู้ใช้สำหรับข้อผิดพลาดได้อย่างถูกต้อง

แคช SWR ส่วนกลาง

SWR จะรักษาแคชในหน่วยความจำส่วนกลาง โดยใช้คีย์คำขอเป็นคีย์ของแคช (โดยทั่วไปคือสตริง URL) คอมโพเนนต์ใดก็ตามที่ขอคีย์เดียวกันจะได้รับค่าที่แคชไว้เดียวกันและมีส่วนร่วมในรอบการตรวจสอบข้อมูลใหม่เดียวกัน

การขจัดคำขอซ้ำโดยอัตโนมัตินี้หมายความว่าคอมโพเนนต์ 10 รายการสามารถเรียกใช้ useSWR ด้วยคีย์เดียวกันได้ และจะมีคำขอเครือข่ายเพียงรายการเดียวเท่านั้น

ฟังก์ชันดึงข้อมูล

SWR แยกตรรกะการจัดการแคชออกจากการดึงข้อมูลจริง คุณจะระบุฟังก์ชันดึงข้อมูล ซึ่งเป็นฟังก์ชัน async ที่รับคีย์และส่งคืนข้อมูล

ฟังก์ชันดึงข้อมูลนี้สามารถสลับเปลี่ยนได้ คุณสามารถใช้ fetch, axios, graphql-request หรือแหล่งข้อมูล async ใดก็ได้ SWR จะจัดการการแคชและการตรวจสอบข้อมูลใหม่โดยไม่ขึ้นอยู่กับวิธีการทำงานของฟังก์ชันดึงข้อมูล

การกำหนดค่าฟังก์ชันดึงข้อมูลส่วนกลาง

ครอบแอปของคุณด้วย SWRConfig โดยให้พร็อพเพอร์ตี value มีฟังก์ชันดึงข้อมูล: value={{ fetcher: (url) => fetch(url).then(r => r.json()) }} การเรียกใช้ useSWR ทุกครั้งที่ไม่ระบุอาร์กิวเมนต์ฟังก์ชันดึงข้อมูลจะใช้ค่าเริ่มต้นส่วนกลางนี้

การทำเช่นนี้รวมการตั้งค่า API (URL พื้นฐานและส่วนหัวการยืนยันตัวตน) ไว้ในที่เดียว โดยไม่ต้องเขียนซ้ำในการเรียกใช้ฮุกแต่ละครั้ง

SWR เทียบกับการดึงข้อมูลแบบดั้งเดิม

รูปแบบดั้งเดิมใช้ useEffect + useState เพื่อจัดการสถานะการโหลด ข้อมูล และข้อผิดพลาดด้วยตนเอง SWR แทนที่ทั้งหมดด้วยการเรียกใช้ฮุกเพียงครั้งเดียว ซึ่งจัดการการแคช การขจัดคำขอซ้ำ การรีเฟรชเบื้องหลัง และการลองส่งคำขอใหม่เมื่อเกิดข้อผิดพลาดโดยอัตโนมัติ

ปริมาณโค้ดที่ลดลงมีมาก คอมโพเนนต์ดึงข้อมูลทั่วไปลดจากมากกว่า 20 บรรทัดเหลือเพียง 3 บรรทัด

การออกแบบคีย์แคช

คีย์จะระบุคำขอหนึ่งรายการโดยไม่ซ้ำกัน ใช้สตริง URL ในกรณีง่าย ๆ สำหรับคำขอที่มีพารามิเตอร์ ให้ใช้คีย์แบบอาร์เรย์: [url, params] โดย params ต้องเป็นออบเจ็กต์หรือสตริงที่คงที่ ส่วน null จะปิดใช้งานคำขอ

การออกแบบคีย์ที่ดีช่วยให้คำขอที่เกี่ยวข้องใช้รายการแคชร่วมกัน และป้องกันไม่ให้คำขอที่ไม่เกี่ยวข้องใช้คีย์ชนกัน

การตรวจสอบข้อมูลใหม่และภาระเครือข่าย

SWR จัดการการตรวจสอบข้อมูลใหม่อย่างชาญฉลาด โดย dedupingInterval (ค่าเริ่มต้น 2 วินาที) จะป้องกันไม่ให้มีการตรวจสอบข้อมูลใหม่หลายครั้งเริ่มทำงานพร้อมกันเมื่อมีคอมโพเนนต์จำนวนมากถูกเมานต์ในเวลาเดียวกัน ภายในช่วงเวลาขจัดคำขอซ้ำ จะมีคำขอเพียงรายการเดียวต่อคีย์

วิธีนี้ป้องกันปัญหาคำขอถล่มพร้อมกัน ซึ่งมักเกิดในโครงสร้างต้นไม้ของคอมโพเนนต์ขนาดใหญ่ที่คอมโพเนนต์จำนวนมากดึงข้อมูลเดียวกัน

SWR ในบริบทของ Next.js

SWR สร้างโดย Vercel บริษัทผู้อยู่เบื้องหลัง Next.js และการผสานรวมก็ทำได้อย่างราบรื่น getServerSideProps หรือ getStaticProps สามารถดึงข้อมูลล่วงหน้าได้ และ SWR จะเติมข้อมูลเริ่มต้นจากค่าที่ดึงล่วงหน้านั้นบนไคลเอ็นต์

ทำให้คุณได้ HTML เริ่มต้นที่เรนเดอร์จากเซิร์ฟเวอร์ พร้อมการตรวจสอบข้อมูลใหม่ฝั่งไคลเอ็นต์โดยอัตโนมัติเมื่อเมานต์ ซึ่งรวมข้อดีของ SSR และ SWR ไว้ด้วยกัน

เมื่อ SWR ตรวจสอบข้อมูลใหม่

ข้อใดต่อไปนี้เป็นสิ่งที่ NOT ทำให้ SWR ตรวจสอบข้อมูลใหม่ตามค่าเริ่มต้น

ทบทวนบทเรียน

SWR ใช้กลยุทธ์ Stale-While-Revalidate โดยส่งข้อมูลที่แคชไว้ให้ทันที ตรวจสอบข้อมูลใหม่เบื้องหลัง และอัปเดตส่วนติดต่อผู้ใช้เมื่อข้อมูลล่าสุดมาถึง โดยจะเริ่มตรวจสอบข้อมูลใหม่เมื่อกลับมาโฟกัส เชื่อมต่อเครือข่ายอีกครั้ง เรียกใช้ mutate และดึงข้อมูลเป็นระยะ แคชส่วนกลางจะขจัดคำขอซ้ำระหว่างคอมโพเนนต์ และฟังก์ชันดึงข้อมูลสามารถสลับเปลี่ยนได้อย่างสมบูรณ์

โมเดลนี้ช่วยลดความซับซ้อนของโค้ดดึงข้อมูลลงอย่างมาก พร้อมทำให้ผู้ใช้รับรู้ว่าแอปทำงานเร็วขึ้น

คำถามที่พบบ่อย

บทเรียน “แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่”

ทำความเข้าใจกลยุทธ์แคชของ SWR: แสดงข้อมูลเก่าทันที ตรวจสอบใหม่เบื้องหลัง และอัปเดตเมื่อได้ข้อมูลล่าสุด คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่
  2. ฮุก useSWR: การดึงข้อมูล การโหลด และสถานะข้อผิดพลาด
  3. การกลายข้อมูลและการอัปเดตเชิงคาดการณ์ด้วย SWR
  4. SWR เทียบกับ React Query: การเลือกเครื่องมือที่เหมาะสม
← กลับไปที่ React Academy