การใช้ PEAR เพื่อบัฟเฟอร์โปรแกรม PHP
การบัฟเฟอร์เป็นประเด็นร้อนในโลก PHP เนื่องจากเพจไดนามิกที่สร้างโดย PHP จำเป็นต้องได้รับการคำนวณใหม่ทุกครั้งที่ผู้ใช้ร้องขอ ไม่ว่าผลลัพธ์ของคำขอจะเหมือนกันหรือไม่ ในเวลาเดียวกัน PHP จะคอมไพล์สคริปต์ทุกครั้ง การโอเวอร์โหลดดังกล่าวจะทนไม่ได้อย่างแน่นอนสำหรับเว็บไซต์ที่มีปริมาณการเข้าชมสูง โชคดีที่ผลลัพธ์ของเว็บสามารถแคชได้โดยไม่จำเป็นต้องรันใหม่และคอมไพล์สคริปต์ ผลิตภัณฑ์เชิงพาณิชย์ เช่น ZendCache หรือ Open Source Alternate PHP Cache มีวิธีในการคอมไพล์สคริปต์ PHP เป็นโค้ดไบต์และแคชสคริปต์เหล่านั้น
แพ็คเกจบัฟเฟอร์ของ PEAR จัดเตรียมเฟรมเวิร์กสำหรับการบัฟเฟอร์เนื้อหาไดนามิก การสืบค้นฐานข้อมูล และการเรียกใช้ฟังก์ชัน PHP
เช่นเดียวกับ Perl มี CPAN และ TeX มี CTAN PHP ก็มีไลบรารีทรัพยากรส่วนกลางของตัวเองเพื่อจัดเก็บคลาส ไลบรารี และโมดูล ไลบรารีนี้เรียกว่า PEAR (PHP Extension และ Add-On Repository)
บทความนี้ถือว่าคุณได้ติดตั้งสภาพแวดล้อม PEAR แล้ว คุณสามารถดาวน์โหลดได้จากเว็บไซต์ PHP แพคเกจบัฟเฟอร์ของ PEAR ประกอบด้วยคลาสบัฟเฟอร์โดยรวมและคลาสย่อยพิเศษหลายคลาส คลาสบัฟเฟอร์ใช้คลาสคอนเทนเนอร์เพื่อจัดเก็บและจัดการข้อมูลที่บัฟเฟอร์
ต่อไปนี้คือคอนเทนเนอร์ที่มีอยู่ในปัจจุบันโดยบัฟเฟอร์ PEAR และพารามิเตอร์ที่เกี่ยวข้อง:
ไฟล์ — คอนเทนเนอร์ไฟล์จะจัดเก็บข้อมูลบัฟเฟอร์ไว้ในระบบไฟล์และเป็นคอนเทนเนอร์ที่เร็วที่สุด
cache_dir - นี่คือไดเร็กทอรีที่คอนเทนเนอร์เก็บไฟล์
filename_prefix — คำนำหน้าของไฟล์แคช เช่น "cache_"
shm — คอนเทนเนอร์ shm ใส่ข้อมูลที่บัฟเฟอร์ลงในหน่วยความจำที่ใช้ร่วมกัน เกณฑ์มาตรฐานแสดงให้เห็นว่าในการใช้งานปัจจุบัน คอนเทนเนอร์นี้จะช้ากว่าคอนเทนเนอร์ไฟล์
shm_key - คีย์ที่ใช้โดยหน่วยความจำที่ใช้ร่วมกัน
shm_perm - การอนุญาตให้ใช้ส่วนข้อมูลหน่วยความจำที่ใช้ร่วมกัน
shm_size - ขนาดของหน่วยความจำที่ใช้ร่วมกันที่จัดสรร
sem_key - ค่าคีย์ของเซมาฟอร์
sem_perm - สิทธิ์สำหรับเซมาฟอร์
db — เลเยอร์นามธรรมฐานข้อมูลของ PEAR
dsn — DSN ของการเชื่อมต่อฐานข้อมูล คุณสามารถดูเอกสาร DB ของ PEAR ได้
cache_table - ชื่อของตาราง
phplib — คอนเทนเนอร์ phplib ใช้เลเยอร์นามธรรมของฐานข้อมูลเพื่อจัดเก็บบัฟเฟอร์
db_class
db_file
db_path
local_file
local_path
ext/dbx - ส่วนขยายเลเยอร์นามธรรมของฐานข้อมูล PHP หากคุณต้องการจัดเก็บบัฟเฟอร์ในฐานข้อมูล คุณสามารถใช้คอนเทนเนอร์นี้ได้
โมดูล
เจ้าภาพ
ฐานข้อมูล
ชื่อผู้ใช้
รหัสผ่าน
cache_table
ดื้อดึง
การปรับปรุงประสิทธิภาพที่ได้รับโดยใช้ PEAR Cache ขึ้นอยู่กับคอนเทนเนอร์บัฟเฟอร์ที่คุณเลือก ตัวอย่างเช่น การจัดเก็บผลลัพธ์ของฐานข้อมูลอีกครั้งในแคชฐานข้อมูลนั้นไม่มีความหมาย
โมดูลบัฟเฟอร์ฟังก์ชันของ PEAR Cache สามารถบัฟเฟอร์ผลลัพธ์ของฟังก์ชันหรือวิธีการใดๆ ได้ ไม่ว่าจะเป็นฟังก์ชันในตัวของ PHP หรือฟังก์ชันที่ผู้ใช้กำหนด โดยจะใช้คอนเทนเนอร์ไฟล์ตามค่าเริ่มต้น และวางข้อมูลที่บัฟเฟอร์ไว้ในไดเร็กทอรีที่เรียกว่า function_cache
ตัวสร้างของคลาส Cache_Function สามารถมีพารามิเตอร์ทางเลือกได้สามตัว:
$container: ชื่อของคอนเทนเนอร์บัฟเฟอร์
$container_options: พารามิเตอร์อาร์เรย์ของคอนเทนเนอร์บัฟเฟอร์
$expires: เวลา (เป็นวินาที) ที่วัตถุบัฟเฟอร์หมดอายุ
เมื่อการเรียกใช้ฟังก์ชันปกติใช้เมธอด call() ของคลาส Cache_Function การบัฟเฟอร์สามารถถูกทริกเกอร์ได้ การโทร call() เป็นเรื่องง่าย อาร์กิวเมนต์หนึ่งคือชื่อของฟังก์ชัน จากนั้นอาร์กิวเมนต์ของฟังก์ชัน อาร์กิวเมนต์ที่สองคือฟังก์ชันแรกที่จะเรียกใช้ และอื่นๆ ลองดูตัวอย่าง:
ตัวอย่างที่ 1 การเรียกฟังก์ชันและวิธีการบัฟเฟอร์
//เรียกใช้ฟังก์ชันบัฟเฟอร์ของ PEAR Cache
need_once 'แคช/Function.php';
// กำหนดคลาสและฟังก์ชันบางอย่าง
คลาสฟู {
แถบฟังก์ชัน($ทดสอบ) {
เสียงสะท้อน "foo::bar($test)
-
-
-
แถบคลาส {
ฟังก์ชั่น foobar($วัตถุ) {
echo '$'.$object.'->foobar('.$object.')
-
-
-
$bar = แถบใหม่;
ฟังก์ชั่น foobar() {
เสียงสะท้อน 'foobar()';
-
// รับวัตถุ Cache_Function
$cache = ใหม่ Cache_Function();
// บัฟเฟอร์ฟังก์ชันคงที่ bar() ของคลาส foo (foo::bar())
$cache->call('foo::bar', 'test');
// $bar->foobar()
$cache->call('bar->foobar', 'bar');
$cache->call('foobar');
-
ด้านล่างเราใช้ Cache_Output เพื่อบัฟเฟอร์เอาต์พุต:
ตัวอย่างที่ 2 เอาต์พุตสคริปต์บัฟเฟอร์
//โหลดบัฟเฟอร์เอาท์พุตของ PEAR Cache
need_once 'แคช/Output.php';
$cache = new Cache_Output('file', array('cache_dir' => '.') );
// คำนวณเครื่องหมายของหน้าที่จะบัฟเฟอร์ เราถือว่าการบัฟเฟอร์ของหน้าขึ้นอยู่กับ
// URL, HTTP GET และ POST ตัวแปรและคุกกี้
$cache_id = $cache->สร้าง ID(
array('url' => $REQUEST_URI, '
โพสต์' => $HTTP_POST_VARS, 'คุกกี้' => $HTTP_COOKIE_VARS) );
//บัฟเฟอร์แบบสอบถาม
ถ้า ($content = $cache->start($cache_id)) {
//โดนบัฟเฟอร์
สะท้อน $content;
ตาย();
-
//บัฟเฟอร์หายไป
// -- ใส่เนื้อหาที่นี่เพื่อสร้างโค้ด --
// เก็บเพจไว้ในบัฟเฟอร์
เสียงสะท้อน $แคช->สิ้นสุด();
-
การใช้คลาส Cache_Output ทำให้ง่ายต่อการแปลงแอปพลิเคชันเว็บไซต์ที่ขับเคลื่อนด้วยฐานข้อมูลแบบไดนามิกให้เป็นแอปพลิเคชันแบบคงที่ ซึ่งช่วยปรับปรุงประสิทธิภาพของไซต์ได้อย่างมาก เว็บไซต์จำนวนมากขึ้นเรื่อยๆ ใช้ GZIP เพื่อบีบอัดเนื้อหา HTML ซึ่งช่วยลดการใช้แบนด์วิธของเซิร์ฟเวอร์ และยังมีประโยชน์มากมายสำหรับผู้ใช้ที่ใช้โมเด็มในการเข้าถึงอินเทอร์เน็ต
Cache_OutputCompression ขยายการทำงานของคลาส Cache_Output โดยบัฟเฟอร์เนื้อหา HTML ที่บีบอัดของ GZIP ซึ่งช่วยประหยัดเวลาในการบีบอัด CPU