แคชเนื้อหาเอาต์พุต แคช PEAR
ต่อไปเราจะเริ่มสำรวจเทคโนโลยีแคชที่ใช้กันทั่วไปมากขึ้น ซึ่งเป็นจุดเน้นของบทความนี้ด้วย ก่อนอื่นเราใช้แพ็คเกจแคชใน PEAR PEAR สามารถแคชเนื้อหาในไฟล์ ฐานข้อมูล หรือหน่วยความจำได้ มาดูไฟล์กัน
นี่คือโปรแกรม PHP ขนาดเล็กที่ไม่ใช้แคช:
pear_content_cache1.php
<?php
echo "นี่คือเนื้อหา <P>";
echo "เวลาปัจจุบันคือ" . date('MdY H:i:s A', time()) .
?>
โปรแกรมข้างต้นนั้นง่ายมาก ตอนนี้เราเพิ่มแคชเข้าไปแล้ว
pear_content_cache2.php
<?php
need_once 'Cache/Output.php';
//ตั้งค่าไดเร็กทอรีแคช ซึ่งจะต้องเขียนได้ $cacheDir = './pear_cache';
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
//หากตัวแปร nocache ว่างเปล่า ให้ใช้เนื้อหาในแคช //หากคุณต้องการรับเนื้อหาล่าสุด ให้กำหนดมัน ไปยังตัวแปร nocache if (empty($_REQUEST['nocache']))
-
// สร้าง ID แคชที่ไม่ซ้ำกัน // คำขอ + ข้อมูลคุกกี้ $cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS) );
-
อื่น
-
//หากคุณต้องการรับเนื้อหาล่าสุด ID จะว่างเปล่า $cache_id = null;
}
//ตรวจสอบว่าเนื้อหาแคชที่สอดคล้องกับรหัสแคชพร้อมใช้งานหรือไม่หาก ($content = $cache->start($cache_id))
-
//มีแคชอยู่แล้ว ส่งออกโดยตรง และสิ้นสุดสคริปต์ echo $content;
ออก();
}
// ไม่มีเนื้อหาอยู่ในแคช ให้สร้างเนื้อหาใหม่และเขียนลงในแคช echo "นี่คือเนื้อหา <P>";
echo "เวลาปัจจุบันคือ" . date('MdY H:i:s A', time()) . "<BR>";
// เขียนเนื้อหาลงในแคช echo $cache->end();
?>
รีเฟรชทั้งสองไฟล์ตามลำดับ และคุณจะพบว่าเวลาในบรรทัด "เวลาปัจจุบันคือ" ใน pear_content_cache1.php เปลี่ยนไปพร้อมกับการรีเฟรช ในขณะที่บรรทัดนี้ใน pear_content_cache2.php จะไม่เปลี่ยนแปลง เนื่องจาก pear_content_cache2.php ใช้แคชเพื่อจัดเก็บเนื้อหาที่ผู้ใช้ร้องขอเป็นไฟล์คงที่ เมื่อผู้ใช้ร้องขออีกครั้ง ไฟล์นั้นจะถูกส่งออกโดยตรงจากไฟล์โดยไม่จำเป็นต้องมีโปรแกรมสร้างเนื้อหาแบบไดนามิก
สำหรับ pear_content_cache2.php หากผู้ใช้ต้องการอ่านข้อมูลล่าสุดแทนข้อมูลเก่าในแคช จากนั้นคุณสามารถเข้าถึงได้ด้วย http://…/pear_content_cache2.php?nocache=1 ซึ่งจะปิดการใช้งานฟังก์ชันแคช รีเฟรชและดูว่าเวลาจะเปลี่ยนไปตามนั้น
เพื่อสรุปการใช้คลาสแคชเนื้อหา PEAR:
1. เมื่อรวมแพ็คเกจ PEAR ต้องแน่ใจว่าได้ตั้งค่าเส้นทางที่ถูกต้อง
2. มีคลาสแคชใน Output.php
need_once 'Cache/Output.php'
; ตั้งค่าไดเร็กทอรีแคช
$cacheDir = './pear_cache';
ยืนยันว่าไดเร็กทอรีนี้สามารถเขียนได้ ข้อมูลแคชจะถูกเขียนไปยังไดเร็กทอรีย่อยของไดเร็กทอรีนี้
4. สร้างออบเจ็กต์แคชเอาต์พุต
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
พารามิเตอร์ตัวแรกระบุว่าเราใช้แคชตามวิธี "file" และพารามิเตอร์ตัวที่สองคือ a อาร์เรย์แคชที่เกี่ยวข้องกับไดเร็กทอรี
5. สร้าง ID แคชที่ไม่ซ้ำกัน
$cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS));
นี่คือ GenerateID ของอ็อบเจ็กต์ $cache ( ) วิธีการโดยการจัดเตรียมอาร์เรย์ข้อมูล (URL, ข้อมูล HTTP POST และคุกกี้ HTTP) เพื่อระบุคำขอนี้โดยไม่ซ้ำกันและแยกความแตกต่างจากคำขออื่น ๆ
6. เพิ่มคำสั่งการตัดสินเชิงตรรกะเพื่อดูว่าข้อมูลแคชที่สอดคล้องกับ cacheID มีอยู่แล้วหรือไม่ หากมีอยู่แล้ว ให้รับข้อมูลและสิ้นสุดสคริปต์
ถ้า ($content = $cache->start($cache_id))
-
สะท้อน $content;
ออก();
}
7. วางโค้ดที่สร้างเนื้อหาไว้หลังคำสั่งลอจิคัลข้างต้น และสิ้นสุดโดยใช้ออบเจ็กต์แคช
echo $cache->end();
ฟังก์ชันแคชเอาต์พุต PEAR cache
PEAR ไม่เพียงแต่สามารถแคชเนื้อหาเอาต์พุตเท่านั้น แต่ยังแคชผลลัพธ์ของการเรียกใช้ฟังก์ชันบางอย่างด้วย นี่เป็นฟีเจอร์ที่น่าสนใจมาก หากโปรแกรมของคุณใช้ฟังก์ชันบางอย่างบ่อยครั้งและผลลัพธ์ของการโทรยังเหมือนเดิม ฉันขอแนะนำให้คุณลองใช้ดู โดยเฉพาะอย่างยิ่งหากฟังก์ชันนี้ทำงานช้า
ต่อไป เราจะใช้การเรียกแบบบัฟเฟอร์ไปที่ slowFunction() ซึ่งเป็นฟังก์ชันที่ดำเนินการช้ามาก
<?php
need_once 'แคช/Function.php';
$cacheDir = './pear_cache/';
$cache = new Cache_Function('file',array('cache_dir' => $cacheDir));
$arr = array('apple', 'ลูกแพร์', 'แตงโม');
$cache->call('slowFunction', $arr);
echo '<BR>';
$arr = array('apple', 'pear', 'แตงโม');
slowFunction($arr);
ฟังก์ชั่น slowFunction($arr = null)
-
echo "ฟังก์ชั่นที่ทำงานช้ามาก: ( <br>";
echo "เวลาปัจจุบันคือ" . date('MdY H:i:s A', time()) ';
foreach ($arr เป็น $ผลไม้)
-
echo "ฉันกิน $ผลไม้ <br>";
-
-
?>
ต่อไปนี้คือผลการดำเนินการสคริปต์ของตัวอย่าง:
ฟังก์ชันที่ดำเนินการช้ามาก
เวลาปัจจุบันคือ Jul-28-2004 17:15:57 PM
ฉันกินแอปเปิ้ล ฉันกินลูกแพร์ ฉันกินแตงโม
ฟังก์ชั่นที่ทำงานช้ามาก :(
เวลาปัจจุบัน คือ วันที่ 28 กรกฎาคม 2547 เวลา 17:17:55 น
ฉันกินแอปเปิ้ล ฉันกินลูกแพร์ ฉันกินแตงโม
ในโค้ด คลาส Cache/Function.php ใช้เพื่อทำหน้าที่บัฟเฟอร์ฟังก์ชัน ตัวแปร $cache คือออบเจ็กต์ Cache_Function ที่ใช้การแคชฟังก์ชันแบบไฟล์และจัดเก็บไว้ในไดเร็กทอรี $cacheDir ในการแคชการเรียกใช้ฟังก์ชัน ควรใช้เมธอด call() ของวัตถุ Cache_Function $cache ในลักษณะนี้: $cache->call('slowFunction', $arr);
ในที่นี้จะมีการเรียกใช้ฟังก์ชัน slowFunction() และพารามิเตอร์ เป็นอาร์เรย์ $arr ฟังก์ชันนี้ถูกแคชไว้ในไฟล์ในไดเร็กทอรี $cacheDir การเรียกใช้ฟังก์ชันนี้ในภายหลังจะส่งผลให้การดำเนินการฟังก์ชันส่งคืนโดย $cache->call() การแคชฟังก์ชันและการใช้งานคล้ายกับการแคชเนื้อหามาก ดังนั้นฉันจะไม่ลงรายละเอียด โปรดตรวจสอบคู่มือ PEAR สำหรับรายละเอียด