การแคชไฟล์แบบแบนโดยไม่มีการหยุดทำงาน

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

ปัญหาคือทุกครั้งที่สร้างแคชของไฟล์ใหม่ ฉันพบว่าปริมาณการรับส่งข้อมูลลดลงเล็กน้อย อาจเป็นเพราะเปอร์เซ็นต์ที่เล็กน้อยแต่ก็ไม่ละเลยของคนประมาณ 2,500 คนที่กำลังดูไซต์นี้เห็นหน้าเว็บที่สร้างขึ้นเพียงครึ่งหน้า

ฉันสงสัยว่าวิธีใดที่ดีกว่าในการสร้างหน้าที่แคชเหล่านี้ใน php จะไม่มีความเสี่ยงที่ผู้ใช้จะเห็นหน้าที่เขียนเพียงครึ่งหน้า

แก้ไข:

นี่คือส่วนของไฟล์ .htaccess ของฉันที่กำหนดว่าจะโหลดไฟล์แคชหรือไม่:

RewriteCond %{HTTP_COOKIE} (user)
RewriteRule (.*)? - [S=3] # Skip the below 2 lines if the above test passes
RewriteRule ^$ app/webroot/cache_static_html/cache_static_popular_results_1.php [L]
RewriteRule ^popular/page:([2-9])$ app/webroot/cache_static_html/cache_static_popular_results_$1.php [L]

person makeee    schedule 01.12.2011    source แหล่งที่มา
comment
คุณสามารถสร้างไฟล์แฟลตออฟไลน์ แล้ววางมันพร้อมกับหน้าที่มีการเปลี่ยนแปลงเพิ่มขึ้นได้หรือไม่   -  person Dustin Davis    schedule 02.12.2011


คำตอบ (2)


Symfony ทนทุกข์ทรมานจากความทุกข์ทรมานเดียวกันนี้เมื่อคุณทำการล้างแคช เพื่อหลีกเลี่ยงปัญหานี้ เราได้อุ่นแคชไว้ล่วงหน้า พิจารณาสิ่งต่อไปนี้:

  • สร้างไดเรกทอรีชั่วคราว (ต้องแน่ใจว่าได้ตั้งค่าการอนุญาตที่ถูกต้อง): cache_temp

  • เพิ่มโค้ดเพื่อจดจำทริกเกอร์ หากมีทริกเกอร์ ให้ตั้งค่า cache dir เป็น cache_temp (แทน cache_current) ตัวอย่างทริกเกอร์ผ่าน http: http://mydomain.com?prewarm=1

  • รหัสจะรู้ว่าจะสร้างไฟล์แคชทั้งหมดใน cache_temp ไม่ใช่ cache_current

  • เปลี่ยนชื่อ cache_current เป็น cache_old

  • เปลี่ยนชื่อ cache_temp เป็น cache_current

  • ลบ cache_old

person Mike Purcell    schedule 01.12.2011
comment
เพียงเพื่อให้แน่ใจว่าฉันเข้าใจ ฉันจะตั้งค่าทริกเกอร์เป็น 1 ก่อนที่จะเริ่มการดำเนินการเปลี่ยนชื่อแคช/เปลี่ยนชื่อทั้งหมด จากนั้นกลับไปเป็น 0 หลังจากนั้น เพื่อที่ฉันจะได้รู้ว่าต้องโหลดจากไดเรกทอรี cache_temp ในขณะที่การดำเนินการเกิดขึ้น มีความคิดใดที่ฉันสามารถตรวจสอบทริกเกอร์ภายในกฎ htaccess ของฉันได้ (ดูการแก้ไขในโพสต์หลักสำหรับกฎ htaccess ปัจจุบันของฉัน) แนวคิดก็คือไม่ต้องโหลดเฟรมเวิร์กของฉันเลยหากควรให้บริการไฟล์แคช ดังนั้นความสามารถในการจัดการการตรวจสอบทริกเกอร์บางตัว (หรือหากมีไฟล์แคชอยู่ ข้อมูลเมตาของไฟล์...) ภายใน htaccess จะเหมาะอย่างยิ่ง - person makeee; 02.12.2011
comment
ทริกเกอร์จะถูกส่งไปเพื่อให้โค้ดของคุณทราบว่ามีการร้องขอการอุ่นเครื่องล่วงหน้า ดังนั้นคุณจึงสามารถบอกเฟรมเวิร์กของคุณให้สร้างไฟล์แคชทั้งหมดใน cache_temp dir แทนที่จะเป็นไดเร็กทอรี cache_curent วิธีนี้ทำให้ไฟล์แคชทั้งหมดพร้อมใช้งานและพร้อมใช้งาน ดังนั้นคุณจะไม่ให้บริการไฟล์แคชบางส่วนภายใต้ภาระหนัก - person Mike Purcell; 02.12.2011
comment
ไม่แน่ใจเกี่ยวกับกฎการเขียนซ้ำ ทุกคำขอที่เราทำจะต้องผ่านเฟรมเวิร์ก จากนั้นเฟรมเวิร์กจะพิจารณาว่าไฟล์แคชใดที่จะใช้ - person Mike Purcell; 02.12.2011
comment
ดูเหมือนว่าฉันสามารถใช้วิธีการของคุณได้และใน htaccess ของฉันใช้ RewriteCond %{TIME_SEC} ‹ 5 เพื่อให้โหลดจากแคชชั่วคราวเป็นเวลา 5 วินาทีในขณะที่งาน cron สร้างไฟล์แคชใหม่ - person makeee; 04.12.2011

ฉันอยากจะแนะนำให้ใช้วิธีแก้ปัญหา memcache ดูเหมือนว่าคุณจะสามารถเขียนแคชของคุณได้อย่างรวดเร็วและไม่จำเป็นต้องใช้วิธีไฟล์แบบแฟลต ไปจำ!

person hookedonit    schedule 01.12.2011
comment
ตรวจสอบให้แน่ใจว่าได้สร้างเนื้อหาก่อนที่จะบัฟเฟอร์ให้กับผู้ใช้และแคชไว้ - person hookedonit; 01.12.2011
comment
ฉันใช้ APC เพื่อแคชบางส่วนของไซต์สำหรับผู้ใช้ที่เข้าสู่ระบบ แต่สำหรับผู้ใช้ที่ไม่ได้เข้าสู่ระบบ ฉันจะข้ามการโหลดเฟรมเวิร์กของไซต์ทั้งหมด (cakephp) ใน htaccess ของฉัน ฉันได้ตรวจสอบว่ามีคุกกี้ผู้ใช้อยู่หรือไม่ และหากไม่มี ก็จะเขียนใหม่ไปยังไฟล์แคชของหน้าแรก - person makeee; 01.12.2011