กฎที่ยากและรวดเร็วสำหรับการควบคุมแคชคืออะไร


15

สารภาพ : เว็บไซต์ที่ฉันรักษามีกฎระเบียบที่แตกต่างกันสำหรับการควบคุมแคชขึ้นอยู่กับการกำหนดค่าเริ่มต้นของเซิร์ฟเวอร์ตามมาด้วยคำแนะนำจากPage Speed & Y-ช้า Firefox ปลั๊กอินและมุมมองเครือข่ายทรัพยากรใน Google ของความเร็ว Tracer Cache-Control ถูกตั้งค่าเป็นส่วนตัว / สาธารณะขึ้นอยู่กับสิ่งที่พวกเขาพูดส่วนหัวของ ETag / / Last-Modified จะถูกแก้ไขเมื่อ Y-Slow แนะนำว่ามีบางอย่างผิดปกติและดูเหมือนว่า Vary-Accept-Encoding จำเป็นเมื่อทำการ gziping ด้วยตนเองสำหรับ Amazon CloudFront

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

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

อะไรคือกฎที่ยากและรวดเร็วสำหรับกลยุทธ์ Cache Control ที่ไม่เชื่อเรื่องพระเจ้า?

แก้ไข:

การเชื่อมโยงผ่านบทความเจฟฟ์แอดอธิบายแคชในเชิงลึกที่ยอดเยี่ยม

สำหรับบันทึกแม้ว่าที่นี่เป็นกฎที่ยากและรวดเร็ว:

หากไฟล์นั้นถูกบีบอัดโดยใช้ GZIP ฯลฯ ให้ใช้ "cache-control: private" เนื่องจากพร็อกซีอาจส่งคืนเวอร์ชันที่บีบอัดไปยังไคลเอนต์ที่ไม่รองรับ (แคชของเบราว์เซอร์จะเก็บไฟล์ที่ทำเครื่องหมายด้วยวิธีนี้) นอกจากนี้อย่าลืมใส่ "Vary: Accept-Encoding" เพื่อบอกว่าสามารถบีบอัดได้

ใช้ Last-Modified ร่วมกับ ETag - การใช้เข็มขัดและวงเล็บปีกกาให้ตัวตรวจสอบความถูกต้องทั้งสองขณะที่ ETag ใช้เนื้อหาไฟล์แทนเวลาแก้ไขเพียงอย่างเดียวโดยใช้ทั้งสองครอบคลุมฐานทั้งหมด หมายเหตุ: PageTest ของ AOLมีวิธีการตามสั่งกับ ETags ด้วยเหตุผลบางประการ หากคุณใช้ Apache บนเซิร์ฟเวอร์มากกว่าหนึ่งเครื่องเพื่อโฮสต์เนื้อหาเดียวกันให้ลบ inode ที่ประกาศโดยปริยายจาก ETags โดยแยกออกจากคำสั่ง FileETag (เช่น "FileETag MTime Size") เว้นแต่ว่าคุณใช้ระบบไฟล์สดแบบเดียวกัน

ใช้ "การควบคุมแคช: สาธารณะ" ทุกที่ที่คุณทำได้ - นี่หมายความว่าพร็อกซีเซิร์ฟเวอร์ (และแคชเบราว์เซอร์) จะส่งคืนเนื้อหาของคุณแม้ว่าส่วนที่เหลือของหน้านั้นต้องการการรับรองความถูกต้อง HTTP เป็นต้น

คำตอบ:


8

ก่อนอื่นอย่ากำจัด ETag อย่างที่ Yahoo พูดเว้นแต่คุณจะใช้เซิร์ฟเวอร์ฟาร์ม / คลัสเตอร์ ตราบใดที่ไฟล์เดียวกันส่งคืน ETag เดิมเสมอเมื่อไม่มีการเปลี่ยนแปลงดังนั้นจึงเป็นคำสั่งที่มีประโยชน์มาก

สำหรับหัวข้ออื่น ๆแนวทางปฏิบัติที่ดีที่สุดของ Yahoo แนะนำให้ตั้งExpiresส่วนหัวในอนาคตสำหรับไฟล์สแตติกใช้Cache-Controlสำหรับเนื้อหาแบบไดนามิก อย่างไรก็ตามCache-controlเนื้อหาในรูปแบบคงที่สมบูรณ์แบบ (ค่อนข้างไม่แตกต่างกันมากนัก)

example.com/styles.css?v=2เมื่อคุณเปลี่ยนไฟล์แคชแบบคงที่คุณจะต้องเปลี่ยนชื่อไฟล์หรือเพิ่มพารามิเตอร์ไม่ซ้ำต่อท้ายเช่น ต้องการเปลี่ยนชื่อไฟล์จริงตามที่ระบุไว้ในความคิดเห็นด้านล่าง

คุณสามารถแก้ไขกฎ YSlow ตามความต้องการของคุณเพื่อลบกฎ Etag และเพิ่มโดเมนของคุณเป็น CDN บทความนี้ยังอ่านดี: ปัญหาของ Yahoo ไม่ใช่ปัญหาของคุณ


ETag หนึ่งใช้กับ Apache ได้โดยทำ "FileETag MTime Size" แทนค่าเริ่มต้นซึ่งรวม inode (ต่อ FS ไม่น่าเชื่อถือ) ใน Y-Slow อย่างไรก็ตามคำแนะนำเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดของ Yahoo นั้นค่อนข้างสับสนเมื่อเปรียบเทียบกับ Page Speed ตัวอย่างเช่นมีการระบุว่าให้ใช้การควบคุมแคชเฉพาะในหน้าเว็บแบบไดนามิก (ตามที่คุณแนะนำด้วย) แต่ Google แนะนำให้ใช้การควบคุมแคช: สาธารณะใน CSS แบบคงที่และการควบคุมแคช: ส่วนตัวบนไฟล์ GZipped Amazon Cloudfront ด้วยตนเอง
Metalshark

เป็นการยากที่จะทราบว่าจะให้คำแนะนำสำหรับผู้รับมอบฉันทะ Google เพิ่งพูดว่า "ผู้รับมอบฉันทะสาธารณะบางคนมีข้อผิดพลาด ... " แต่ไม่ได้บอกว่านี่เป็นที่แพร่หลาย ขอแนะนำให้ตั้งค่าส่วนหัวVary: Accept-Encodingดูที่ด้านล่างของcode.google.com/speed/page-speed/docs/caching.html
DisgruntledGoat

การเพิ่มพารามิเตอร์การสืบค้นจะปิดใช้งานการแคชไฟล์นั้นอย่างสมบูรณ์ในบางเบราว์เซอร์ ดังนั้นคุณอาจต้องการใช้วิธี "เปลี่ยนชื่อไฟล์" แทนเช่นexample.com/style_v2.css
Evgeny

@Evgeny: เบราว์เซอร์ใด ฉันเคยได้ยินเรื่องนี้มาก่อน แต่ฉันไม่เคยเห็นเบราว์เซอร์ที่ไม่ได้แคชไฟล์จริง ๆ (โดยเฉพาะถ้าคุณมีส่วนหัวที่เหมาะสม)
DisgruntledGoat

@DisgruntledGoat หลังจากขุดมาแล้วดูเหมือนว่าเป็นของที่ระลึกจากยุค http / 1.0 ซึ่งเป็นส่วนหนึ่งของข้อมูลจำเพาะที่จริง ๆ แล้วตัวแทนผู้ใช้ต้องไม่แคชสินทรัพย์ที่มีสตริงข้อความค้นหา ในทางกลับกันcode.google.com/speed/page-speed/docs/caching.htmlระบุว่าเป็นพร็อกซี (squid <3.0) ที่จะไม่แคชสินทรัพย์และดังนั้นการใช้สตริงการสืบค้นเพื่อป้องกันการแคชแคชนั้นไม่ได้รับการสนับสนุน
Evgeny

0

เปลี่ยนส่วนหัวคำขอของทรัพยากรของคุณเพื่อใช้การแคชสำหรับคนส่วนใหญ่วิธีการแคช ebable คือการเพิ่มรหัสลงในไฟล์ที่เรียกว่า. htaccess บนเว็บโฮสต์ / เซิร์ฟเวอร์ของคุณ

ซึ่งหมายความว่าไปที่ตัวจัดการไฟล์ (หรือที่ใดก็ตามที่คุณไปเพิ่มหรืออัปโหลดไฟล์) บนเว็บโฮสต์ของคุณ

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

รหัสด้านล่างนี้จะบอกเบราว์เซอร์ว่าต้องแคชอะไรและต้อง "จดจำ" นานเท่าใด ควรเพิ่มไว้ที่ด้านบนของไฟล์. htaccess ของคุณ

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

บันทึกไฟล์. htaccess จากนั้นรีเฟรชหน้าเว็บของคุณ

ที่มา:
https://varvy.com/pagespeed/leverage-browser-caching.html


เกือบทุกตัวอย่างของExpiresByTypeคำสั่งที่ฉันเห็นรวมถึงประเภท mime text/x-javascript- เซิร์ฟเวอร์ของคุณตอบสนองกับเนื้อหาประเภทนี้หรือไม่! (ตัวอย่างของการคัดลอกคนตาบอด / การวาง IMO)
MrWhite
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.