เข้าใจ ETags: กุญแจสู่การแคชที่มีประสิทธิภาพ
เมื่อแอปพลิเคชันเว็บของคุณให้บริการไฟล์แก่ลูกค้า механизмการแคชที่มีประสิทธิภาพมีบทบาทสำคัญต่อประสิทธิภาพ โดยวิธีการที่มีประสิทธิภาพในการจัดการกับการแคชคือการใช้ ETag HTTP headers
ในบล็อกโพสต์นี้ เราจะสำรวจ วิธีการสร้าง header ETag
สำหรับไฟล์ทรัพยากรของคุณและทำไมมันจึงมีความสำคัญในการเพิ่มประสิทธิภาพการส่งทรัพยากรบนเว็บ
ETag คืออะไร?
ETag
(Entity Tag) คือสตริงที่กำหนดโดยเว็บเซิร์ฟเวอร์ซึ่งแสดงถึงเวอร์ชันที่เฉพาะเจาะจงของทรัพยากร เมื่อไคลเอนต์ขอไฟล์ เซิร์ฟเวอร์จะส่งทรัพยากรพร้อมกับ ETag
ของมันกลับไป ไคลเอนต์จะรวม ETag
ใน header ของคำขอเมื่อมันขอไฟล์เดียวกันในครั้งถัดไป เซิร์ฟเวอร์จะเปรียบเทียบ ETag
จากคำขอกับเวอร์ชันปัจจุบันของไฟล์:
- หาก
ETag
ตรงกัน แสดงว่าไฟล์ยังไม่เปลี่ยนแปลง และเซิร์ฟเวอร์จะตอบกลับด้วยสถานะ304 Not Modified
ซึ่งช่วยประหยัดแบนด์วิดธ์และทำให้เวลานโหลดเร็วขึ้น - หาก
ETag
ไม่ตรงกัน เซิร์ฟเวอร์จะส่งไฟล์ที่อัปเดตพร้อมกับETag
ใหม่ วิธีการนี้ช่วยให้มั่นใจได้ว่าไคลเอนต์มีเวอร์ชันล่าสุดของทรัพยากรเสมอ
วิธีการสร้าง ETag: คู่มือแบบทีละขั้นตอน
1. เข้าใจโครงสร้างของ ETag
แทนที่จะใช้ค่า checksum ทั่วไป เราสามารถสร้าง ETag
ตามคุณสมบัติของไฟล์ได้ วิธีที่มีประสิทธิภาพคือการสร้างสตริงที่รวมถึง:
- เวลาปรับปรุงไฟล์ล่าสุด (
st_mtime
): แสดงว่ามีการแก้ไขไฟล์เมื่อใด - ขนาดไฟล์ (
st_size
): ช่วยยืนยันว่าขนาดเนื้อหาไฟล์ไม่เปลี่ยนแปลง - หมายเลข inode (
st_ino
): รหัสประจำตัวเฉพาะของไฟล์ในระบบไฟล์
การรวมกันนี้ช่วยให้สามารถติดตามเวอร์ชันของไฟล์ได้อย่างแข็งแกร่ง
2. การใช้โค้ด
นี่คือฟังก์ชันง่าย ๆ ในการสร้าง ETag
ฟังก์ชันนี้รับสตริงที่จัดสรรไว้ล่วงหน้าและพอยเตอร์ไปยังโครงสร้าง stat
ที่มีข้อมูลเมตาของไฟล์
char *mketag(char *s, struct stat *sb) {
sprintf(s, "%d-%d-%d", sb->st_mtime, sb->st_size, sb->st_ino);
return s;
}
3. ขั้นตอนการทำงานของกระบวนการ ETag
นี่คือวิธีการทำงานของกระบวนการ ETag ในลักษณะที่เรียบง่าย:
-
ไคลเอนต์ขอไฟล์ (เช่น
foo
):Client -> Request: GET /foo
-
เซิร์ฟเวอร์ตอบกลับ ด้วยไฟล์และ
ETag
ของมัน:Server -> Response: File foo with ETag: "xyz"
-
ไคลเอนต์ทำการขออีกครั้ง พร้อมกับส่ง
ETag
ที่ได้รับ:Client -> Request: GET /foo (with ETag: "xyz")
-
เซิร์ฟเวอร์ตรวจสอบ ETag:
- หากมันตรงกับเวอร์ชันปัจจุบัน จะตอบกลับด้วย
304 Not Modified
- หากไม่ตรงกัน จะส่งไฟล์ที่อัปเดตและ
ETag
ใหม่
- หากมันตรงกับเวอร์ชันปัจจุบัน จะตอบกลับด้วย
4. ข้อดีของการใช้ ETags
การใช้ ETags
มีข้อดีหลายประการ:
- ลดเวลาในการโหลด: ไคลเอนต์สามารถหลีกเลี่ยงการดาวน์โหลดไฟล์ที่ไม่มีการแก้ไข ลดเวลารอคอย
- การใช้แบนด์วิดธ์ที่ต่ำลง: มีเพียงไฟล์ที่มีการเปลี่ยนแปลงเท่านั้นที่ถูกส่ง ทำให้ประหยัดทรัพยากรสำหรับเซิร์ฟเวอร์และไคลเอนต์
- ประสบการณ์ของผู้ใช้ที่ดีขึ้น: ผู้ใช้ได้รับเนื้อหาที่ทันสมัยรวดเร็วโดยไม่มีความล่าช้าที่ไม่จำเป็น
สรุป
การสร้าง header ETag
สำหรับไฟล์ทรัพยากรของคุณเป็นวิธีที่ตรงไปตรงมาและมีประสิทธิภาพในการเพิ่มประสิทธิภาพของเว็บเซิร์ฟเวอร์และกลไกการแคชของไคลเอนต์ โดยการรวมข้อมูลเมตาของไฟล์ไปเป็นสตริงที่ไม่ซ้ำกัน คุณสามารถมั่นใจได้ว่าไคลเอนต์จะได้รับเวอร์ชันล่าสุดของทรัพยากรของคุณตลอดเวลาในขณะที่ลดการโอนข้อมูลที่ไม่จำเป็น
ด้วยการใช้ ETags
ตามที่อธิบายไว้ข้างต้น คุณก็จะสามารถเพิ่มประสิทธิภาพประสิทธิภาพของแอปพลิเคชันเว็บของคุณและมอบประสบการณ์ที่ราบรื่นยิ่งขึ้นให้แก่ผู้ใช้ของคุณ