뚠뚠멍의 생각들

วิธีแคชการตอบสนอง API + การแคชหน้าเว็บ

สร้าง: 2024-09-29

สร้าง: 2024-09-29 21:03

คุณคงเคยเจอกับประสบการณ์ที่เว็บไซต์โหลดหน้าเดิมซ้ำเมื่อกดปุ่มย้อนกลับ


ตัวอย่างเช่น ในเว็บไซต์อีคอมเมิร์ซ เมื่อคุณคลิกที่สินค้าจากผลการค้นหา แล้วกดปุ่มย้อนกลับ

มันจะทำการค้นหาใหม่


การโหลดหน้าเดิมซ้ำนั้นไม่ดีต่อประสบการณ์การใช้งาน (UX) และยังเป็นปัญหาใหญ่ในเชิงระบบอีกด้วย

การโหลดหน้าซ้ำทำให้เกิดการเรียกใช้ API ที่ไม่จำเป็นและเพิ่มปริมาณการใช้งาน

อาจทำให้เกิดปัญหาเรื่องค่าใช้จ่าย และถ้าหากมีการเก็บรวบรวมข้อมูลบนหน้านั้น อาจทำให้เกิดปัญหาการเก็บรวบรวมข้อมูลซ้ำซ้อน


เพื่อแก้ปัญหานี้ การแคชหน้าเว็บหรือผลลัพธ์จาก API จะช่วยได้มาก


1. การใช้พื้นที่จัดเก็บของเบราว์เซอร์ (localStorage, SessionStorage, IndexedDB)

- localStorage จะเก็บข้อมูลไว้แม้ว่าจะปิดเบราว์เซอร์แล้วก็ตาม

- sessionStorage จะลบข้อมูลเมื่อปิดเบราว์เซอร์หรือแท็บ

- IndexedDB ใช้สำหรับเก็บข้อมูลขนาดใหญ่ สามารถเก็บข้อมูลแบบอะซิงโครนัส และเป็น NoSql สามารถเก็บรูปภาพหรือวิดีโอได้ ขนาดสูงสุดขึ้นอยู่กับเบราว์เซอร์ แต่โดยทั่วไปประมาณ 50mb สามารถใช้งานได้แม้ในโหมดออฟไลน์



2. Axios Interceptor

ถ้าใช้ axios คุณสามารถใช้ interceptor ซึ่งเป็นฟังก์ชันในตัว เพื่อส่งคืนคำตอบโดยไม่ส่งไปยังเซิร์ฟเวอร์สำหรับคำขอเดียวกัน


การแคชใน Nuxt Framework

คุณสามารถแคชคอมโพเนนต์ได้โดยการห่อคอมโพเนนต์ด้วยแท็ก keep-alive


คุณสามารถกำหนดได้ว่าจะเรียกใช้ fetch() ในระหว่างการเรนเดอร์ฝั่งเซิร์ฟเวอร์หรือไม่ ถ้าเป็น false จะเรียกใช้ fetch() ในฝั่งไคลเอนต์เท่านั้น


นอกจากนี้ยังสามารถใช้ Vuex ได้ หลักการทำงานเหมือนกับการใช้ browser storage


สามารถใช้เว็บเซิร์ฟเวอร์ (Nginx) เพื่อกำหนดค่าแคชในส่วนหัวของการตอบกลับได้

แต่การใช้แคชอาจทำให้การปรับใช้รีซอร์ส เช่น รูปภาพ ไม่ทันที ดังนั้นในกรณีเช่นนี้ คุณต้องล้างแคช เช่น การเปลี่ยนชื่อไฟล์ การส่งคำขอเพื่อล้างแคช หรือถ้าคุณใช้ AWS CloudFront คุณสามารถใช้ฟังก์ชันล้างแคชได้


ยังมีวิธีการอื่นๆ คือการบันทึกหน้าเว็บที่เรนเดอร์โดย Nuxt Server ลงในแคชหน่วยความจำ

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

ถ้ามีผู้ใช้ 10,000 คนขอหน้าเดียวกัน

เมื่อผู้ใช้คนแรกขอ หน้าจะเรนเดอร์และถูกแคช

ผู้ใช้ที่เหลืออีก 9,999 คน เมื่อเข้าถึงหน้าเดียวกัน เซิร์ฟเวอร์จะส่งคืนผลลัพธ์จากแคช

-> วิธีนี้ไม่เหมาะสมหากคุณต้องแสดงข้อมูลที่แตกต่างกันไปตามแต่ละผู้ใช้

+ cache ใช้แพคเกจ lru-cache ภายใน

* lru : อัลกอริทึมการแคชที่ลบข้อมูลที่ไม่ได้ใช้งานมานานที่สุดก่อน

ใช้โครงสร้างข้อมูล hash map หรือ doubly linked list เพื่อค้นหาคีย์-ค่าได้อย่างรวดเร็ว: ความซับซ้อนของเวลา O(1)

ความคิดเห็น0

[DB] เกณฑ์การตั้งค่าแคชบทความนี้จะแนะนำเกณฑ์การตั้งค่าแคชของฐานข้อมูลและตัวอย่างการใช้งานจริง รวมถึงวิธีการแคชข้อมูลที่อ่านบ่อยและเขียนน้อย โดยเฉพาะอย่างยิ่งการรักษาความใหม่ล่าสุดของข้อมูลผ่านการตั้งค่า TTL
제이온
제이온
제이온
제이온

April 25, 2024

การสืบค้นข้อมูลบนเว็บ (Crawling) คืออะไร?เรียนรู้เกี่ยวกับการสืบค้นข้อมูลบนเว็บ ซึ่งเป็นกระบวนการที่เว็บครอลเลอร์ค้นหาและรวบรวมข้อมูลจากหน้าเว็บอินเทอร์เน็ต การสืบค้นข้อมูลบนเว็บถูกนำไปใช้ในหลากหลายสาขา เช่น เครื่องมือค้นหา การเปรียบเทียบราคา และการวิเคราะห์โซเชียลมีเดีย
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요

April 26, 2024

ใช้ Cloud Run ในการให้บริการไฟล์ Static - 1บทความบล็อกเกี่ยวกับวิธีการใช้ Google Cloud Run ในการให้บริการไฟล์แบบคงที่ มุ่งเน้นไปที่การเปลี่ยนเส้นทางและการปรับปรุงประสิทธิภาพ
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그

September 4, 2024

[สำหรับผู้ไม่ใช่ผู้เชี่ยวชาญ ด้านการพัฒนาซอฟต์แวร์ เพื่อความอยู่รอด] 14. สรุปเนื้อหาสัมภาษณ์ทางเทคนิคที่ผู้พัฒนาซอฟต์แวร์มือใหม่ถามบ่อยสรุปคำถามทางเทคนิคที่มักถามในการสัมภาษณ์งานผู้พัฒนาซอฟต์แวร์มือใหม่ (พื้นที่หน่วยความจำ โครงสร้างข้อมูล ฐานข้อมูล ฯลฯ) หวังว่าจะเป็นประโยชน์ในการเตรียมตัวสัมภาษณ์งานด้านการพัฒนา
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

แท็กแคนนอนนิกัล (canonical tag) คืออะไร: ความสำคัญและวิธีการปรับแต่งสำหรับ SEOใน SEO แท็กแคนนอนนิกัลมีบทบาทสำคัญในการแก้ปัญหาเนื้อหาซ้ำซ้อนและการเพิ่มประสิทธิภาพสำหรับเครื่องมือค้นหา การตั้งค่าที่ถูกต้องจะช่วยปรับปรุงอันดับการค้นหาและเพิ่มประสิทธิภาพการคืบคลาน
꿈많은청년들
꿈많은청년들
꿈많은청년들
꿈많은청년들

August 7, 2024