เทคนิคแก้เว็บอืด ด้วยการทำ cache

เทคนิคแก้เว็บอืด ด้วยการทำ cache

จริงๆแล้ว เรื่องของเว็บอืดนั้น มันเกิดมาได้จากหลายสาเหตุมากเลยนะครับ ที่เป็นหัวข้อหลักๆ ก็จะแบ่งออกมาได้เป็น

  • เครื่อง server ประมวลผลช้า หรือ ประมวลผลไม่ทัน อันนี้ มองในมุม hardware นั่นเอง
  • software ที่ใช้งานมีปัญหา อันนี้มองในมุม software ซึ่งต้องมองหลายมิติ ไม่ว่าจะเป็น OS, program, code, environment หลายๆด้านประกอบกัน

คนที่จะตอบได้ว่าเว็บช้าเพราะอะไร ต้องเป็นคนที่ใช้ความรู้ความสามารถหลายด้านเข้ามาประกอบกัน เพื่อตรวจสอบและหาต้นเหตุ ไม่ได้ต่างกับตำรวจที่ต้องสืบสวนสอบสวนเพื่อหาคนร้ายนั่นแหล่ะ

ส่วน case ที่ผมจะเล่าให้ฟังนี้เป็น ส่วนหนึ่งของปัญหาเท่านั้น ที่ผ่านการวิเคราะห์ปัญหามาแล้ว ว่าปัญหาเกิดจาก โค้ดที่ใช้เขียนหน้าเว็บ มันช้า เพราะว่าหน้าเดียว query ไป 8,000 กว่าครั้ง ครับ ผมพิมพ์ไม่ผิด  แปดพันกว่าครั้ง ต่อการเปิดหน้าเว็บหนึ่งหน้า โดยโค้ดตัวนี้ ผมบอกได้แค่ว่าเป็น open source สำเร็จรูปชื่อดังตัวหนึ่ง สำหรับทำเว็บขายของ ที่คนทั่วโลกใช้กัน ถ้าบอกไปก็อ๋อเลยแหล่ะ เพราะว่ามันช้าจริงๆ ตั้งแต่ครั้งแรกที่เปิดใช้เลย (ยิ่งใช้ตัวเสริมก็ยิ่งช้าเพิ่มขึ้นไปอีก)

ผมวิเคราะห์แล้ว ว่าไม่สามารถแก้ปัญหาความช้าได้ที่ต้นเหตุ เพราะว่าต้นเหตุคือ software ตัวนั้นเค้าวางแนวคิดมาได้แย่มาก เป็นการใช้พลังงานของ database แบบมหาศาลเลย ถ้าผมจะแก้ที่ต้นเหตุ ก็คือต้องรื้อโครงสร้างหลักของโค้ด ของ database ออกมาวางใหม่หมด เรียกได้ว่า เขียนใหม่ง่ายกว่า แต่ว่างานนี้มีความยากตรงที่ไม่ได้ต้องการให้เขียนใหม่ เพียงแค่ต้องแก้ให้มันเร็วเท่านั้น

หลังจากที่วิเคราะห์มาแล้ว เทคนิคที่ช่วยได้ก็คือการเขียน cache หลังจากที่ query ได้นั่นเอง 

เทคนิคก็คือ โค้ดเดิมมีการ query ผลออกมาใช้ตามปกติ แต่แทนที่จะเอาไปใช้เลย ผมก็เอามาเก็บใส่ cache เอาไว้เลย แล้วก็เขียนโค้ดดักเอาไว้ก่อนว่า ให้อ่านจาก cache ก่อน ถ้าไม่มีให้อ่านจาก database ปกติ

อธิบายเป็นฉากๆ ก็คือ

วิธีคิดก่อน cache

  1. อ่าน database
  2. เอาไปใช้

การอ่าน database แบบปกติ

วิธีคิดหลัง cache

  1. อ่านจาก cache ก่อนว่ามีหรือไม่
  2. ถ้ามีใน cache เอาจาก cache ออกไปใช้เลย
    1. ถ้าไม่มีใน cache ให้อ่าน database
    2. อ่านจาก database ได้แล้วให้เอาไปเก็บใน cache
    3. แล้วเอาค่าที่อ่านจาก database ได้ออกไปใช้

มี cache ช่วย

เท่านี้เองครับ ผมก็เข้าไปแก้ไขโค้ดเลย จุดไหนที่อ่าน database มาก็เข้าไปแก้ๆให้ใช้งาน cache สิ่งที่ผมทำไป ผมแก้แค่ 3 ไฟล์เท่านั้นด้วยวิธีการนี้ ทำให้หน้าแรก จากเดิมโหลดใช้เวลาประมวลผล (ไม่นับเวลาที่ส่งข้อมูลมาให้ user) ใช้เวลา 30 กว่าวินาที ก็เหลือแค่ 9 วินาทีต้นๆเท่านั้นเอง (จุดนี้ผมยังไม่พอใจครับ ต้องแก้ไขอีกหลายอย่างเพื่อให้เร็วขึ้นกว่านี้อีก)

โดย script ในการช่วยจัดการ cache อ่านได้จาก http://www.jongales.com/blog/2009/02/18/simple-file-based-php-cache-class/ ได้เลยครับ มีโค้ด พร้อมตัวอย่างให้ครบเลย

ข้อสำคัญในการใช้ คือเรื่องของ key และเวลาหมดอายุครับ เพราะว่าถ้าเราตั้งเวลาหมดอายุนานๆ แปลว่าข้อมูลก็จะไม่สดนั่นเอง

การทำ cache แบบที่ผมเล่าให้ฟัง ไม่ได้ช่วยให้เว็บทำงานได้เร็วที่สุดในทุกกรณี แต่ว่ามันช่วยได้ภายใต้ข้อจำกัดที่ผมเจอมาครับ จึงมาเล่าสู่กันฟังนั่นเอง

Create: Modify : 2012-09-20 22:25:55 Read : 8373 URL :