🔥 แค่ 5 นาที เปลี่ยนมุมมองได้เลย

การทำ Caching Strategy สำหรับเว็บไซต์ที่มี Traffic สูง

ยาวไป อยากเลือกอ่าน?

กลยุทธ์แคชที่ได้ผลคือแยกเลเยอร์ Browser–CDN/Edge–Server–Service Worker ตั้ง Cache-Control/ETag ให้เหมาะชนิดคอนเทนต์ ทำ fingerprinting + immutable กับ assets, ตั้ง TTL HTML/JSON สั้นพร้อมสลับ SWR/รีเฟรชฉลาด และวัดผลด้วย CWV/TTFB/Cache-Hit Ratio หลังเปลี่ยน.

Website Caching Strategy Guide (2025): ทำให้เว็บเร็ว เสถียร และคุ้มโฮสติ้ง

สำหรับเจ้าของเว็บ/PM/DevOps เป้าหมายคือ “โหลดไวขึ้น วัดผลได้ ลดต้นทุนทราฟฟิก” โดยไม่ทำให้ข้อมูลผิดเวลา เราจะวางแผนแบบ layered caching (Browser → CDN/Edge → Server → Service Worker) พร้อมเฮดเดอร์และ TTL ที่เหมาะกับงาน

1) เลือกเลเยอร์แคชให้ตรงงาน

เลเยอร์เหมาะกับข้อดีข้อควรระวัง
Browser cache ไฟล์คงที่: JS/CSS/ภาพ/ฟอนต์ ลดดาวน์โหลดซ้ำ, เร่ง LCP/INP ต้องทำ fingerprinting และ immutable
CDN/Edge cache HTML/static API ที่อนุญาต, ไฟล์สื่อ ลด TTFB, แบ่งเบา origin, กาง TTL ยาวได้ คีย์แคช/คุกกี้/ฮีดเดอร์ Vary มีผลต่อ hit
Server cache เพจที่เรนเดอร์ซ้ำบ่อย กันโหลด DB/แอป, ต้นทุนต่ำ ต้องล้างแคชตามอีเวนต์เผยแพร่
Service Worker PWA/ฟีเจอร์ออฟไลน์/สลับ SWR คุมกลยุทธ์ต่อไฟล์/เส้นทางละเอียด ต้องจัดลำดับอัปเดตและเวอร์ชันให้ดี

2) ค่าที่ควรรู้: Cache-Control/Validators/Vary

หัวข้อตัวอย่างใช้เมื่อหมายเหตุ
max-age, s-maxage Cache-Control: public, max-age=31536000, immutable
Cache-Control: public, s-maxage=600, max-age=60
ไฟล์คงที่ (ยาว), HTML ผ่าน CDN (สั้น) s-maxage สำหรับ proxy/CDN
no-store, no-cache no-store สำหรับข้อมูลอ่อนไหว หน้าแอดมิน/เช็คเอาต์/ข้อมูลส่วนตัว no-cache = ต้อง revalidate ก่อนใช้
Validator ETag, Last-Modified HTML/JSON ที่เปลี่ยนบ่อย ช่วยลด payload ด้วย conditional request
Vary Vary: Accept-Encoding, Accept-Language คอนเทนต์ขึ้นกับภาษา/รูปแบบบีบอัด อย่าใส่คุกกี้โดยไม่จำเป็น จะทำให้ miss
Immutable immutable + ชื่อไฟล์มีแฮช JS/CSS/ฟอนต์/รูป เปลี่ยนไฟล์ = เปลี่ยนชื่อ (fingerprinting)

3) ตารางแนะนำ TTL/เฮดเดอร์ ต่อชนิดคอนเทนต์

ชนิดBrowserCDN/EdgeServerหมายเหตุ
HTML (หน้าเงิน/บล็อก) max-age=60 s-maxage=600 + ETag page cache 1–10 นาที ใช้ revalidate ทันทีหลังเผยแพร่
API JSON (สาธารณะ) max-age=30–300 s-maxage=300–1800 + ETag object cache 1–30 นาที ถ้าเรียลไทม์ให้ลด TTL หรือ no-store
ภาพ/ไอคอน/ฟอนต์ max-age=31536000, immutable ตาม Browser ใส่แฮชไฟล์เสมอ
JS/CSS ที่มีแฮช max-age=31536000, immutable ตาม Browser เปลี่ยนเวอร์ชันด้วยไฟล์เนม
หน้าแอดมิน/บัญชี no-store no-store หลีกเลี่ยงแคชทุกชั้น

4) อาการยอดฮิต → ตัวชี้วัด → วิธีแก้

อาการตัวชี้วัดสาเหตุวิธีแก้
TTFB สูง TTFB p75 > 800ms Edge ไม่แคช HTML/API ตั้ง s-maxage + ETag และ purge ตามอีเวนต์
Hit Ratio ต่ำ Edge hit < 60% คีย์แคชแตกจากคุกกี้/พารามิเตอร์ กำหนดคีย์ชัด, ไม่นำคุกกี้ที่ไม่จำเป็นมาพิจารณา
LCP/INP ไม่ผ่าน CWV fail ไฟล์ใหญ่/โหลดซ้ำ immutable+fingerprinting, preload LCP, ลดสคริปต์

5) โค้ดตัวอย่างเฮดเดอร์ (Nginx)

# สินทรัพย์มีแฮช
location ~* \.(js|css|png|jpg|jpeg|gif|webp|avif|svg|woff2)$ {
  add_header Cache-Control "public, max-age=31536000, immutable";
}

# HTML (ผ่าน CDN ได้ยาวกว่า)
location ~* \.(html)$ {
  add_header Cache-Control "public, s-maxage=600, max-age=60";
  add_header Vary "Accept-Encoding, Accept-Language";
  etag on;
}

# หลังบ้าน/เช็คเอาต์
location /admin/ {
  add_header Cache-Control "no-store";
}

6) ตัวอย่าง Service Worker: stale-while-revalidate แบบเรียบง่าย

// sw.js (ตัวอย่างอย่างย่อ)
self.addEventListener('fetch', (event) => {
  const req = event.request;
  if (req.method !== 'GET') return;

  event.respondWith((async () => {
    const cache = await caches.open('v1');
    const cached = await cache.match(req);
    const fetchPromise = fetch(req).then(res => {
      cache.put(req, res.clone());
      return res;
    });
    return cached || fetchPromise; // SWR: เสิร์ฟของเก่าแล้วรีเฟรช
  })());
});

7) Fingerprinting + immutable (ตัวอย่าง)

<link rel="preload" as="style" href="/assets/app.3f9c1c7.css">
<link rel="stylesheet" href="/assets/app.3f9c1c7.css">
<script defer src="/assets/app.9a21be4.js"></script>

บริการที่เกี่ยวข้อง (Internal Links)

อ่านต่อ (บทความที่เกี่ยวข้อง)

อ้างอิงภายนอก (E-E-A-T)


FAQ (People Also Ask)

ควรแคช HTML ไหม?
ถ้าเป็นหน้าเนื้อหา/การตลาดทั่วไป แคชที่ CDN ได้โดยตั้ง s-maxage สั้น ๆ + ETag และ purge เมื่อเผยแพร่ ส่วนเพจส่วนตัว/หลังบ้านให้ no-store

ETag ต่างจาก Last-Modified อย่างไร?
ทั้งคู่เป็นตัวตรวจสอบเวอร์ชัน (validator) เพื่อทำ conditional request; ETag ยืดหยุ่น/แม่นยำกว่า ในขณะที่ Last-Modified เรียบง่ายและถูกคำนวณอัตโนมัติ

stale-while-revalidate ใช้เมื่อไร?
เหมาะกับ CDN/พร็อกซีและใช้คู่กับ SW หรือ TTL สั้น ช่วยเสิร์ฟของเก่าทันทีระหว่างดึงของใหม่ ลด TTFB/สั่นไหวของระบบ

ทำไม Cache-Hit Ratio ต่ำ?
คีย์แคชแตกเพราะคุกกี้/พารามิเตอร์, ไม่มี s-maxage, หรือมี Vary กว้างเกิน แก้ด้วยคีย์เฉพาะที่จำเป็นและกำหนดกฎ bypass ให้ชัด

อัปเดตล่าสุด: 23 Aug 2025


เกี่ยวกับผู้เขียน

Vision X Brain Team — ทีม Website/SEO/CRO & Webflow เราวางกลยุทธ์แคชแบบครบเลเยอร์ ตั้งแต่ CDN/Edge จนถึง Service Worker เพื่อให้เว็บเร็วขึ้นอย่างยั่งยืนและวัดผลได้จริง สนใจเริ่มต้นดูที่ บริการทั้งหมด

แชร์

Recent Blog

ข้อดีของ responsive web design ที่ธุรกิจยุคใหม่ต้องรู้ ปี 2025

ค้นพบข้อดีของ responsive web design พร้อมเคล็ดลับเพิ่มยอดขายและสร้างประสบการณ์เว็บที่ดีกับลูกค้า เหมาะสำหรับธุรกิจออนไลน์ยุคใหม่ปี 2025

ข้อดีของ responsive web design ที่ธุรกิจยุคใหม่ต้องรู้ ปี 2025

ค้นพบข้อดีของ responsive web design พร้อมเคล็ดลับเพิ่มยอดขายและสร้างประสบการณ์เว็บที่ดีกับลูกค้า เหมาะสำหรับธุรกิจออนไลน์ยุคใหม่ปี 2025

การวิเคราะห์ UX/UI เบื้องต้น สำหรับเจ้าของธุรกิจและผู้ทำเว็บไซต์ 2025