Cache หรือ ข้อมูลชั่วคราว คือ การที่เราทำการดึงข้อมูลออกมาแสดง หรือประมวลผล ซึ่งถ้าข้อมูลนั้นมีจำนวน จะส่งผลให้การดึงข้อมูลนั้นใช้เวลานาน และยิ่งข้อมูลนั้นๆ ถูกจำกัดจำนวนที่เรียกใช้แล้ว การจะดึงข้อมูลเดิมมาใช้ซ้ำบ่อย ๆ จึงต้องมีการเก็บข้อมูลชั่วคราว (cache) ซึ่งจะเก็บข้อมูลที่มีการดึงข้อมูลมาเก็บไว้ชั่วคราวตามเวลาที่กำหนด เพื่อที่จะไม่ต้องไปดึงข้อมูลใหม่ แต่จะเป็นการเรียกใช้ cache แทน ซึ่งจะทำให้การประมวลผลมาความรวดเร็วยิ่งขึ้น โดยวันนี้จะมานำเสนอในส่วนของการเก็บ cache ใน module พยากรณ์อากาศ ซึ่ง module ตัวนี้คือการดึงข้อมูลจาก api ของเว็บไซต์ กรมอุตุนิยมวิทยา ซึ่งต้องมีการเก็บข้อมูลชั่วคราว (cache) เพื่อที่จะไม่ให้มีการไปดึงข้อมูลการเว็บ กรมอุตุ ทุกครั้งที่มีการรีเฟรชหน้าจอ ซึ่งการดึงข้อมูลนั้นเป็นสิ่งที่ช้ามากเพราะชนิดข้อมูลมีถึง 77 จังหวัด ซึ่งการเก็บข้อมูลชั่วคราวช่วยได้มากเลยทีเดียว โดยขั้นตอนการ เขียนคำสั่ง เก็บข้อมูลชั่วคราว (cache) มีดังนี้
คำสั่งที่ใช้ หน้า php
โค้ด: เลือกทั้งหมด
require_once __DIR__ . '/helper.php';
$helper = new ModWeatherForcecastHelper();
$cache = \Joomla\CMS\Factory::getCache('mod_mweather_forcecast',''); // เรียกใช้ Cache function
cache->setCaching($params->get('cache',1)); //เปิด ปิดการทำงาน
$cache->setLifeTime($params->get('cache_time',900)); //set เวลา default 900
$product = $cache->get($cache->makeId());
if (!$product) {
$product = $helper->getItems();
$cache->store($product ,$cache->makeId());
}
require(JModuleHelper::getLayoutPath('mod_mweather_forcecast','default'));
จากนั้นกำหนดระยะเวลาที่ทำการเก็บข้อมูลชั่วคราว จากนั้นทำการดึงข้อมูล จาก cache เก็บไว้ในตัวแปร $product ซึ่งมีการตรวจสอบว่า ถ้า $product เป็นค่าว่างให้ทำการดึงค่าจาก ฟังก์ชั่น getItem() ซึ่งเป็นฟังก์ชันการดึงข้อมูลจาก api จากนั้นนำไปเก็บไว้ใน cache
หน้า xml
โค้ด: เลือกทั้งหมด
<fieldset name="advanced">
<field
name="cache"
type="list"
label="COM_MODULES_FIELD_CACHING_LABEL"
description="COM_MODULES_FIELD_CACHING_DESC"
default="1"
filter="integer"
>
<option value="1">JGLOBAL_USE_GLOBAL</option>
<option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
</field>
<field
name="cache_time"
type="number"
label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
description="COM_MODULES_FIELD_CACHE_TIME_DESC"
default="900"
filter="integer"
/>
</fieldset>
หน้าตั้งค่า แสดงผลในส่วนของ แท็บ advance เมื่อมีการดึงข้อมูล cache จะถูกเก็บไว้ใน folder cache ใน folder Joomla ภายในไฟล์จะเป็นข้อมูลที่ทำการ ดึงข้อมูลมาเก็บไว้