pico hosting ผู้ให้บริการ Web hosting จดโดเมนราคาประหยัด  

บทความ: PrestaShop: ทำ cache ให้กับ blockcategories

    สำหรับใครที่ใช้ PrestaShop แล้วร้านค้าของคุณมีหมวดหมู่สินค้าจำนวนมากๆ จะทำให้ PrestaShop ใช้งาน CPU ค่อนข้างสูง ในตอนแรกผมคิดว่าเป็นเพราะการ query ข้อมูลของหมวดหมู่สินค้า จึงได้ลองทำ cache ในส่วนของการ query ฐานข้อมูลดู แต่การใช้งาน cpu ยังสูงเหมือนเดิม จึงเริ่มสงสัยว่าสาเหตุที่ PrestaShop ใช้งาน CPU สูงๆนั้น น่าจะมาจาก การสร้างหน้าเว็บของ smarty (smarty ก็คือ theme engine ที่ PrestaShop ใช้เป็นระบบสร้างหน้าเว็บ)
    ต่อมาผมจึงลองเปิดใช้งาน caching ของ smarty ดู ผลที่ได้ก็เหมือนเดิมคือ PrestaShop ยังใช้งาน CPU สูงอยู่เหมือนเดิม (แล้วจะทำระบบ cache มาทำไมเนี้ย T_T) โอเค ไม่เป็นไร หาทางแก้ต่อ เลยเข้าไปดู code ของไฟล์ blockcategories.php ใน function hookLeftColumn($params) ก็มีความคิดดีๆเกิดขึ้น ในเมื่อระบบ cache (ของเขา)ใช้งานไม่ได้ผล ก็ต้องออกแรงทำระบบ cache เองละ
    เอาเป็นว่ามาดู source code ที่ผมเพิ่มเข้าไปกันดีกว่าครับ ผมขอแสดงเฉพาะส่วนที่แก้ไขนะครับ Source code นี้แก้ไขให้ลูกค้ารายหนึ่ง เขาใช้ PrestaShop V1.0 อยู่ source code น่าจะใช้งานได้กับเวอร์ชั่นอื่นได้

		/* /ONLY FOR THEME OLDER THAN v1.0 */
		// build cache reduce cpu usage by picohosting.com
		$cache = _PS_MODULE_DIR_.'blockcategories/cache';
		if(!file_exists($cache) || (time() - filemtime($cache)) > (60*60)) {
			$data = $this->display(__FILE__, 'blockcategories.tpl');
			$handle = fopen($cache, 'w');
			fwrite($handle, $data);
			fclose($handle);
		} else {
			$handle = fopen($cache, "rb");
			$data = stream_get_contents($handle);
			fclose($handle);
		}
		// end build cache reduce cpu usage by picohosting.com
		//return $this->display(__FILE__, 'blockcategories.tpl');
		return $data;

    จาก source code ด้านบน จะตรวจสอบว่ามีไฟล์ blockcategories/cache อยู่หรือเปล่า ถ้าไม่มีให้สร้างไฟล์ blockcategories/cache ขึ้นมาแล้วเก็บข้อมูลของหมวดหมู่สินค้าไว้ในไฟล์นี้ หากมีไฟล์นี้อยู่แล้วให้ตรวจสอบว่าการสร้างไฟล์ cache ครั้งล่าสุดครบ 1 ชั่วโมงหรือยัง ถ้าครบแล้วให้สร้าง cache ใหม่ หากมีการแก้ไขหรือเพิ่มหมวดหมู่สินค้า ต้องรอให้มีการอัพเดท cache ก่อนนะครับ หน้าเว็บจึงจะแสดงข้อมูลที่แก้ไขใหม่ การอัพเดท cache ทำได้โดยการรอให้ครบ 1 ชั่วโมง หรือจะลบไฟล์ blockcategories/cache ออกครับ ข้อมูล cache ที่เก็บไว้จะได้จากการสร้างหน้าเว็บของ samrty ที่มาจาก $this->display(__FILE__, 'blockcategories.tpl');

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

    ยังมีวิธีลดการใช้งาน cpu ลงอีกวิธีหนึ่งคือเข้าไปตั้งค่าใน Admin -> Modules -> Block categories โดยตั้งค่าให้แสดงหมวดหมู่เพียงหมวดหมู่เดียว ข้อเสียของการตั้งค่าแบบนี้ก็คือเราจะคลิกดูหมวดหมู่ย่อยใน block categories ไม่ได้

ใครที่นำบทความไปเผยแพร่ที่เว็บไซต์อื่น กรุณาทำลิ้งค์กลับมายังบทความต้นฉบับด้วยนะครับ