หน้าเว็บ

วันจันทร์ที่ 22 สิงหาคม พ.ศ. 2554

เล่นกับ Cache ใน Smarty 3 ตอนที่ 1

สวัสดีค่ะ ว่าจะเขียนเรื่อง Cache ใน Smarty นานแล้วแต่ยังไม่ค่อยเข้าใจมันเท่าไหร่ หลังจากวันก่อนมีเวลาได้ลองเล่นระบบ Cache ใน Smarty อีกครั้งหนึ่งพอเข้าใจขึ้นมาบ้างแต่ก็ยังงงบางส่วน เอาเป็นว่าวันนี้จะมาเขียนในส่วนของที่เรียวเข้าใจก่อนละกันนะ ผิดพลาดส่วนไหน ก็ comment บอกกันได้

ปกติ Smarty จะแบ่งออกเป็นสองส่วนคือส่วนแรกจะเรียกกว่า Code behind ก็คือส่วนที่เราเขียน Code ต่าง ๆ เอาไว้ไม่ว่าจะเป็นการ Query data จากฐานข้อมูล Logic ต่าง ๆ เรียวจะขอเรียกว่าส่วน Code behind และกัน
อีกส่วนหนึ่งคือส่วนของ Template ซึ่ง Class smarty นั้นจะทำการประมวลผลจากตัว Code แล้ว Render ออกมาเป็นไฟล์ Template ดังนั้นเวลาเราเขียนและ Compile เสร็จเราจะได้ไฟล์อยู่ 2 ไฟล์คือ .php กัน .tpl (template) นั่นเอง

ก่อนอื่นให้เปิดใช้งาน Cache ใน Smarty ก่อน และกำหนด Path สำหรับเก็บไฟล์ cache

test1.php

// กำหนด Absolute Path สำหรับ include ไฟล์
$DOC_ROOT = "C:/AppServ/www/smarty/";

require_once($DOC_ROOT.'templates-engine/libs/Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = $DOC_ROOT."templates";

// กำหนด Directory ที่เก็บไฟล์ cache
$smarty->cache_dir = $DOC_ROOT."templates-cache";  

$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
$smarty->setCompileCheck(true);
$word1 = "ทดสอบการใช้ Cache 1";
$smarty->assign('word1',$word1);
$smarty->display('test1.tpl');

ค่ำสั่ง $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); กับคำสั่ง
$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED); ตรงนี้ไม่รู้ต่างกันยังไงใครลองแล้วเข้าใจมาบอกกันด้วยนะ

ส่วนคำสั่ง  $smarty->setCompileCheck(true);
ถ้าเรากำหนดเป็น true หมายความว่าจะทำการตรวจสอบไฟล์ template (.tpl) ก่อนว่ามีการเปลี่ยนแปลงหรือเปล่า ถ้ามีการเปลี่ยนแปลงจะ Render ไฟล์ template ใหม่แล้วทำเป็นไฟล์ Cache แต่ถ้าไฟล์ temlate หลักไม่มีการเปลี่ยนแปลง มันจะไปดึงจากไฟล์ cache มาใช้งานโดยไม่ต้อง Render ไฟล์ใหม่ ตรงนี้ส่วนของ Code behind จะทำการประมวลผลปกตินะตรงนี้อย่าสับสนนะคะ ไม่เชื่อลอง echo อะไรก็ได้ออกมาดูจะมี output ออกมาปกติ
ส่วนถ้าเรากำหนดค่าเป็น false หมายความว่าจะำทำการดึงไฟล์ cache ขึ้นมาใช้ทันทีโดยไม่สนใจว่าไฟล์ template มีการเปลี่ยนแปลงหรือเปล่า (อาจจะเกิดปัญหา content refesh ต้อง manage ดี ๆ นะ)

บางคนสงสัยว่าเอ๊แล้วจะไม่ให้ไฟล์ Code behind มันประมวลผลทุกครั้งจะทำยังไง ตัว Smarty มี Method isCached() ให้ใช้ค่ะ เดี๋ยวจะอธิบายให้ฟังทีหลัง

test1.tpl

<body>
{$word1}
</body>

output

ทดสอบการใช้ Cache 1

ลองรันดูเราจะเห็นว่าไฟล์ test1.php ถูก compile ปกติ แต่ไฟล์ template จะไปดึงจากไฟล์ cache กรณีที่มีไฟล์ cache อยู่แต่้ถ้าไม่มีไฟล์ template อยู่ จะประมวลผลไฟล์ test1.php อีกครั้ง

มากำหนดเวลาการใช้งาน Cache กัน

$smarty->setCacheLifetime(60);  // กำหนดเวลาใช้ cache 1 นาที

กรณีที่เราไม่กำหนด setCacheLifetime()  ค่า Default จะอยู่ที่ 3600 วินาที หรือ 1 ชั่วโมง

การทำงานก็คือเมื่อหมดเวลา Cache จะทำการ Render ไฟล์ template ใหม่แล้วทำเ็ป็นไฟล์ cache  ถ้ายังไม่หมดเวลาก็จะดึงจากไฟล์ Cache มาแสดงผล ซึ่งไฟล์ Code behind จะประมวลผลทุกครั้งเหมือนเดิมนะคะ อย่าสับสน

1 ความคิดเห็น:

  1. กำลังหัด เว็บไทยหายากจริง smarty ตอนนี้ยังพัฒนาอยู่รึป่าวครับ

    ตอบลบ