วันจันทร์ที่ 9 ธันวาคม 2024
โปรดอนุญาตให้เราแคชนะ
อินเทอร์เน็ตเติบโตขึ้นในช่วงหลายปีที่ผ่านมา ปริมาณการ Crawl ของ Google ก็เพิ่มขึ้นด้วย แม้ว่าโครงสร้างพื้นฐานการ Crawl ของ Google จะรองรับกลไกการแคชที่แบบฮิวริสติกมาโดยตลอด แต่จำนวนคำขอที่แสดงผลจากแคชในเครื่องก็ลดลง โดย 10 ปีที่แล้วการดึงข้อมูลทั้งหมดมีประมาณ 0.026% แคชได้ ซึ่งก็ถือว่าน้อยอยู่แล้ว แต่ปัจจุบันตัวเลขดังกล่าวลดลงมาอยู่ที่ 0.017%
เหตุใดการแคชจึงสำคัญ
การแคชเป็นส่วนสําคัญของจิ๊กซอว์ขนาดใหญ่อย่างอินเทอร์เน็ต การแคชช่วยให้หน้าเว็บโหลดได้อย่างรวดเร็วเมื่อเข้าชมซ้ำ ช่วยประหยัดทรัพยากรการประมวลผลและทรัพยากรธรรมชาติ รวมถึงประหยัดแบนด์วิดท์ที่มีราคาแพงมหาศาลสำหรับทั้งไคลเอ็นต์และเซิร์ฟเวอร์
โดยเฉพาะอย่างยิ่งหากคุณมีเว็บไซต์ขนาดใหญ่ที่มีเนื้อหาเปลี่ยนแปลงน้อยมากใน URL แต่ละรายการ การอนุญาตให้แคชในเครื่องอาจช่วยให้ระบบทำการ Crawl เว็บไซต์ได้อย่างมีประสิทธิภาพมากขึ้น โครงสร้างพื้นฐานการ Crawl ของ Google รองรับการแคช HTTP แบบฮิวริสติกตามที่ระบุไว้ในมาตรฐานการแคช HTTP โดยเฉพาะอย่างยิ่งผ่านส่วนหัวการตอบกลับ ETag
และคำขอ If-None-Match
รวมถึงส่วนหัวการตอบกลับ Last-Modified
และคำขอ If-Modified-Since
เราขอแนะนําอย่างยิ่งให้ใช้ ETag
เนื่องจากมีแนวโน้มที่จะเกิดข้อผิดพลาดและข้อผิดพลาดน้อยกว่า (ค่านี้จะไม่อยู่ในโครงสร้างซึ่งต่างจากค่า Last-Modified
) และหากมีตัวเลือกดังกล่าว ให้ตั้งค่าทั้ง 2 รายการ แล้วอินเทอร์เน็ตจะขอบคุณคุณ อาจจะนะ
ส่วนการเปลี่ยนแปลงที่คุณคิดว่ากำหนดให้ลูกค้าต้องรีเฟรชแคชหรือไม่นั้นขึ้นอยู่กับคุณ เราขอแนะนำให้คุณรีเฟรชแคชเมื่อมีการเปลี่ยนแปลงที่สำคัญในเนื้อหา แต่หากอัปเดตเฉพาะวันที่จดทะเบียนลิขสิทธิ์ที่ด้านล่างของหน้า การเปลี่ยนแปลงนั้นอาจไม่สำคัญ
ETag
และ If-None-Match
Crawler ของ Google รองรับคำขอแบบมีเงื่อนไขตาม ETag
ตามที่ระบุไว้ในมาตรฐานการแคช HTTP
กล่าวคือ หากต้องการส่งสัญญาณค่ากำหนดการแคชไปยัง Crawler ของ Google ให้ตั้งค่า Etag
เป็นสตริง ASCII ที่กำหนดเอง (โดยปกติจะเป็นแฮชของเนื้อหาหรือหมายเลขเวอร์ชัน แต่อาจเป็นส่วนของ π ก็ได้ ทั้งนี้ขึ้นอยู่กับคุณ) โดยตั้งค่าไม่ให้ซ้ำกันสำหรับการแสดงเนื้อหาที่โฮสต์โดย URL ที่เข้าถึง
ตัวอย่างเช่น หากคุณโฮสต์เนื้อหาเดียวกันในเวอร์ชันต่างๆ ภายใต้ URL เดียวกัน (เช่น เวอร์ชันอุปกรณ์เคลื่อนที่และเวอร์ชันเดสก์ท็อป) แต่ละเวอร์ชันอาจมีค่า ETag
ที่ไม่ซ้ำกัน
Crawler ของ Google ที่รองรับการแคชจะส่งค่า ETag
ที่แสดงผลจากการ Crawl URL ก่อนหน้าใน If-None-Match header
หากค่า ETag
ที่ Crawler ส่งตรงกับค่าปัจจุบันที่เซิร์ฟเวอร์สร้างขึ้น เซิร์ฟเวอร์ควรแสดงรหัสสถานะ HTTP 304
(ไม่มีการเปลี่ยนแปลง) โดยไม่มีเนื้อหา HTTP การไม่มีเนื้อหา HTTP เป็นส่วนสําคัญเนื่องจากเหตุผล 2 ข้อต่อไปนี้
- เซิร์ฟเวอร์ของคุณไม่จําเป็นต้องใช้ทรัพยากรการประมวลผลในการสร้างเนื้อหาจริง ซึ่งหมายความว่าคุณประหยัดเงินได้
- เซิร์ฟเวอร์ของคุณไม่จําเป็นต้องโอนเนื้อหา HTTP ซึ่งหมายความว่าคุณประหยัดเงินได้
ทางฝั่งไคลเอ็นต์ เช่น เบราว์เซอร์ของผู้ใช้หรือ Googlebot จะดึงข้อมูลเนื้อหาภายใต้ URL นั้นจากแคชภายในของไคลเอ็นต์ เนื่องจากไม่มีการโอนข้อมูล การดำเนินการนี้จึงเกิดขึ้นอย่างรวดเร็ว ทำให้ผู้ใช้พึงพอใจและอาจช่วยประหยัดทรัพยากรให้กับผู้ใช้ด้วย
Last-Modified
และ If-Modified-Since
เช่นเดียวกับ ETag
Crawler ของ Google ยังรองรับคำขอแบบมีเงื่อนไข Last-Modified based
ด้วย ตามที่ระบุไว้ในมาตรฐานการแคช HTTP โดยจะทำงานในลักษณะเดียวกับ ETag
จากมุมมองเชิงความหมาย กล่าวคือ มีการใช้ตัวระบุเพื่อตัดสินใจว่าทรัพยากรนี้แคชได้หรือไม่ และจะให้ประโยชน์เช่นเดียวกับ ETag
ฝั่งไคลเอ็นต์
เราขอแนะนํา 2-3 ข้อหากคุณใช้ Last-Modified
เป็นคำสั่งการแคช
-
วันที่ในส่วนหัว
Last-Modified
ต้องอยู่ในรูปแบบตามมาตรฐาน HTTP เราขอแนะนำให้ใช้รูปแบบวันที่ต่อไปนี้เพื่อหลีกเลี่ยงปัญหาการแยกวิเคราะห์ "วันธรรมดา, DD Mon YYYY HH:MM:SS เขตเวลา" ตัวอย่างเช่น "Fri, 4 Sep 1998 19:15:56 GMT" -
แม้ว่าจะไม่จําเป็น แต่ให้พิจารณาตั้งค่าช่อง
max-age
ของส่วนหัวCache-Control
ด้วยเพื่อช่วย Crawler ระบุเวลาที่จะทำการ Crawl URL หนึ่งๆ อีกครั้ง ตั้งค่าของช่องmax-age
เป็นจำนวนวินาทีที่คาดว่าเนื้อหาจะไม่มีการเปลี่ยนแปลง ตัวอย่างเช่นCache-Control: max-age=94043
ตัวอย่าง
หากคุณเป็นเหมือนผม การทําความเข้าใจวิธีการทํางานของแคชเชิงฮิวริสติกเป็นเรื่องน่าสนุกและท้าทาย แต่การแสดงตัวอย่างลำดับคำขอและการตอบกลับดูเหมือนจะช่วยเราได้ ต่อไปนี้เป็นเชน 2 รายการ เชนหนึ่งสำหรับ ETag
/If-None-Match
และอีกเชนสำหรับ Last-Modified
/If-Modified-Since
เพื่อแสดงภาพว่าการแคชควรจะทํางานอย่างไร
ETag /If-None-Match |
Last-Modified /If-Modified-Since |
|
---|---|---|
การตอบสนองของเซิร์ฟเวอร์ต่อการ Crawl: การตอบสนองนี้ช่วยให้ Crawler บันทึกช่องส่วนหัวเงื่อนไขเบื้องต้น ETag และ Last-Modified ได้
|
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT ETag: "34aa387-d-1568eb00" ... |
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT Cache-Control: max-age=94043 ... |
คำขอแบบมีเงื่อนไขของ Crawler ที่ตามมา: คำขอแบบมีเงื่อนไขจะอิงตามค่าส่วนหัวของเงื่อนไขเริ่มต้นที่บันทึกไว้จากคำขอก่อนหน้า ระบบจะส่งค่ากลับไปยังเซิร์ฟเวอร์เพื่อตรวจสอบในส่วนหัวคำขอ If-None-Match และ If-Modified-Since
|
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-None-Match: "34aa387-d-1568eb00" ... |
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
การตอบสนองของเซิร์ฟเวอร์ต่อคำขอแบบมีเงื่อนไข: เนื่องจากค่าส่วนหัวเงื่อนไขที่ Crawler ส่งมาได้รับการตรวจสอบในฝั่งเซิร์ฟเวอร์ เซิร์ฟเวอร์จึงแสดงรหัสสถานะ HTTP 304 (ไม่มีเนื้อหา HTTP) ไปยัง Crawler การดำเนินการนี้จะมีผลกับคำขอทุกรายการที่ตามมาจนกว่าเงื่อนไขเบื้องต้นจะตรวจสอบไม่สำเร็จ (วันที่ ETag หรือ Last-Modified เปลี่ยนแปลงในฝั่งเซิร์ฟเวอร์)
|
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:52 GMT Vary: Accept-Encoding If-None-Match: "34aa387-d-1568eb00" ... |
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:51 GMT Vary: Accept-Encoding If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
หากคุณทำธุรกิจเพื่อสร้างความพึงพอใจให้แก่ผู้ใช้และอาจต้องการประหยัดเงินค่าโฮสติ้งด้วย โปรดปรึกษาผู้ให้บริการโฮสติ้งหรือ CMS หรือนักพัฒนาซอฟต์แวร์เกี่ยวกับวิธีเปิดใช้การแคช HTTP สำหรับเว็บไซต์ อย่างน้อยที่สุด ผู้ใช้ก็จะชอบคุณมากขึ้น
หากต้องการพูดคุยเกี่ยวกับการแคช โปรดไปที่ชุมชนความช่วยเหลือของ Search Central ที่สะดวกที่สุด และหากมีความคิดเห็นเกี่ยวกับวิธีที่เราแคช โปรดแสดงความคิดเห็นเกี่ยวกับเอกสารประกอบเกี่ยวกับการแคชที่เราเผยแพร่พร้อมกับบล็อกโพสต์นี้