ปรกติแล้วใน timthumb.php จะมีความสามารถในการ cache รูปที่ถูกย่ออยู่แล้ว เพื่อไม่ให้มันต้อง crop รูปสำหรับทุกๆ request. แต่ว่าปัญหา คือ ไฟล์ cache ของ timthumb นั้น มันไม่ใช่ไฟล์รูปที่สามารถเปิดดูได้โดยตรง เพราะว่าที่ส่วนหัวของ cache จะมี filePrependSecurityBlock แทรกอยู่เพื่อป้องกันการส่งสคริปท์ php เข้าไปรัน. จากลักษณะการทำงานที่เป็นชี้นี้ ทำให้เราไม่สามารถใช้พวก Reverse proxy หรือ CDN มาช่วยในการลดโหลดได้ของ WordPress ที่มีจำนวน Traffic สูงๆ ได้ (ไม่งั้นมันเรียก php ขึ้นมาทำงานตลอด). Continue reading “Modifying timthumb.php in wordpress’s theme for optimize performance”
Category: Wordpress
ปัญหา Query หนักใน plugin post-views ของ WordPress
วันก่อนเซิร์ฟเวอร์เครื่องหนึ่งเกิดปัญหาโหลดขึ้นสูงอย่างหนัก จึงได้เข้าไปตรวจสอบ
พบว่าสาเหตุเกิดจาก เว็บไซต์ลูกค้ารายหนึ่ง ใช้ WordPress และมีคนเข้าจำนวนมาก เค้าได้ติดตั้ง plugin ที่มีชื่อ post-views เข้าใจว่ามันจะทำการนับ stats และแสดงรายการ posts ที่มีคนเข้าชมเยอะ ไรประมาณนั้น
ใน Query ที่ plugin มันเขียน มันใช้ SELECT ใหม่ทุก โดยใช้ WHERE ระบุเป็นเงื่อนไขเวลาที่ละเอียดเป็นวินาทีเลย. ผมเลยลองเข้าไปแก้ให้ Query มัน WHERE โดยใช้เวลาเป็น floor ที่ interval=20 minutes เพราะตอนแรกเดาว่ามันน่าจะได้ประโยชน์จาก MySQL query cache แต่ปรากฎว่าไม่ช่วยแฮะ ไม่รู้ว่า result มันขนาดเกิน cache limit หรือเปล่า
ผมเลยแก้ให้มันเขียน result ลงไฟล์แทน โดยใช้ serialize
ต้องสร้างโฟลเดอร์ /wp-content/plugins/post-views/cache/ และเปิดสิทธิ์ให้ php เขียนไฟล์ในโฟลเดอร์นี้ได้ด้วย
อันนี้เป็นไฟล์ที่ผมแก้แล้ว แก้ 2 จุดครับ ประมาณบรรทัดที่ 2243 และ 2412 ครับ (ดาวน์โหลด post-views.php)