หลายคนคงเห็นพี่ Tee++; และ icez พูดกันมาแล้ว กับ APC
มันคืออะไร ลองอ่านบทความนี้ดูนะครับ เป็นบทความเก่าเก็บ (ผมเขียนเอง)
เขียนสรุปตอนที่ผมยังไม่รู้จักมัน -*-
หมายเหตุ มีแก้ไขเพื่อความเหมาะสม / มีแค่เนื้อหาส่วนสำคัญที่ใช้งาน
APC เป็น extension ตัวหนึ่งของ php
APC มันมีความสามารถในการทำ cache ตัวแปร ครับ
ย้ำกว่าตัวแปรอย่างเดียว กรณีที่เป็น class มันก็จะแคชไว้ได้เฉพาะตัวแปร
โดยมันจะทำให้อยู่ในรูป opcode ครับ เลยสะดวกที่ครั้งต่อมา ไม่ต้องแปลงจาก php เป็น opcode อีก
ส่วนฟังค์ชั่น ถ้าไฟล์ต้นฉบับ มีการแก้ไข มันก็จะเปลี่ยนตาม
ส่วนตัวแปร ถ้าไม่มีการทำแคชใหม่ มันจะคงสภาพไปอย่างนั้นครับ และมีหมดอายุได้
ผมขออธิบายเพิ่มนะครับ ระบบ cache ใน APC แบ่งออกเป็น 2 ชนิด
แบบแรกคือ user อันนี้เกิดจากการสั่งทำ cache เฉพาะตัวแปรนั้นๆ ครับ
เป็นการทำ cache จากฟังค์ชั่น apc_add หรือ apc_store ครับ
แบบสองคือ system มันจะเป็นการแคชอัตโนมัติ ซึ่งอันนี้ผมยังไม่เข้าใจนะ ว่าการทำงานลึกๆ เป็นยังไง
ดังนั้นผมจะพูดถึงแค่ cache ด้วย user สั่งความสามารถมันมีตามนี้ครับ
1. การทำแคชแบบปกติapc_add เราจะไม่ใช้ เพราะทำแล้ว ครั้งต่อมามันเหมือนกระพริบได้ (ครั้งแรก แสดง ครั้งสอง ลบ ครั้งสามแสดง ครั้งสี่ ลบ.....) อันนี้ไปลองดูเองนะครับ
เราจะใช้ apc_store ทำแคชครับ พอทำแล้ว เวลาเรียก ใช้ apc_fetch เรียกครับ
แล้วลบด้วย apc_delete
ความสามารถคือทำแคชให้กับตัวแปรนั้นๆ
เมื่อมีการเรียกครั้งที่ 2 โดยไม่มีตัวแปรนั้นอยู่ในหน้านั้นๆ ก็สามารถทำได้
ยกตัวอย่างนะครับ ทำตามนี้
สร้างไฟล์หลักตัวแรกชื่อ apc.php แล้วใส่
<?
if(!apc_fetch('var')) {
include("apc2.php");
}
echo apc_fetch('var');
?>
ไฟล์สองชื่อ apc2.php ใส่
<?
$var = rand();
apc_store('var', $var, 10);
?>
แล้วลองรัน apc.php ดูครับ
ผมว่าถ้ามาใช้กับสคริประบบใหญ่ๆ มันไม่ต้อง include ทุกครั้ง
ถ้าสมมุติลดการทำงานได้ 0.01 วิ 100 คนก็ลดการทำงานได้ 1 วิ กับระบบใหญ่ๆนี้จำเป็นมากๆ เลย
2. การทำแคชแบบ globalคือ เรียกใช้งานข้ามสคริปได้ (เหมือนขยายความสามารถจากข้อ 1 ครับ)
ใช้ apc_define_constants สร้าง แล้วเวลาลบ ให้ใส่ array ว่างๆ
เวลาเรียกใช้ ใช้ apc_load_constants ครับ
มันสามารถเรียกทำงานข้ามไฟล์ แบบ
สมมุติ apc_define_constants เมื่อตอนเรียกไฟล์ a ทำงาน
แต่เรามาเอาค่าด้วย apc_load_constants จากเวลาเรียกไฟล์ b ได้
นอกนั้นก็ไม่มีอะไรมากครับ
เสียดาย มันน่าทำแคชฟังค์ชั่นได้ด้วย
เพราะถ้าทำแคชฟังค์ชั่นตอนเป็น opcode ได้นี้
ระบบจะเบาหย่องเลย ยิ่งกะ แบบ smarty หรือ adodb นี้
ลดเวลารันได้โขเลยครับ
ปล. ใครมีอะไรแนะนำก็บอกได้นะครับ เพราะบทความข้างต้นเป็นส่วนที่ผมศึกษาเองครับ
########################
อัพเดตสรุปส่วน system จะทำหน้าที่ cache โค้ด php เราให้กลายเป็น opcode ก่อนนะครับ
opcode คือโค้ดที่ได้แปลงจาก php เป็นภาษาเครื่องแล้ว (ถ้าเข้าใจไม่ผิดนะ)
ดังนั้นการแปลงทั้งหมดเป็น opcode แล้ว cache ไว้
มันช่วยลดขั้นตอนการประมวลผลได้ระดับหนึ่งเลย
ยังมีอีกหลายตัวที่ทำการแปลง opcode เป็น เช่น eaccelerator เป็นต้น