ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: APC คืออะไร  (อ่าน 10902 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,516



ดูรายละเอียด
« เมื่อ: 11 มกราคม 2008, 19:35:12 »

หลายคนคงเห็นพี่ Tee++; และ icez พูดกันมาแล้ว กับ APC

มันคืออะไร ลองอ่านบทความนี้ดูนะครับ เป็นบทความเก่าเก็บ (ผมเขียนเอง)
เขียนสรุปตอนที่ผมยังไม่รู้จักมัน -*-

หมายเหตุ มีแก้ไขเพื่อความเหมาะสม / มีแค่เนื้อหาส่วนสำคัญที่ใช้งาน

APC เป็น extension ตัวหนึ่งของ php

โค๊ด:
http://www.php.net/apc

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 นี้
ลดเวลารันได้โขเลยครับ

ปล. ใครมีอะไรแนะนำก็บอกได้นะครับ เพราะบทความข้างต้นเป็นส่วนที่ผมศึกษาเองครับ  Tongue

########################

อัพเดต

สรุปส่วน system จะทำหน้าที่ cache โค้ด php เราให้กลายเป็น opcode ก่อนนะครับ

opcode คือโค้ดที่ได้แปลงจาก php เป็นภาษาเครื่องแล้ว (ถ้าเข้าใจไม่ผิดนะ)
ดังนั้นการแปลงทั้งหมดเป็น opcode แล้ว cache ไว้

มันช่วยลดขั้นตอนการประมวลผลได้ระดับหนึ่งเลย

ยังมีอีกหลายตัวที่ทำการแปลง opcode เป็น เช่น eaccelerator เป็นต้น
« แก้ไขครั้งสุดท้าย: 07 มกราคม 2009, 15:06:49 โดย EThaiZone » บันทึกการเข้า

icez
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 296
ออฟไลน์ ออฟไลน์

กระทู้: 2,879



ดูรายละเอียด
« ตอบ #1 เมื่อ: 11 มกราคม 2008, 21:13:43 »

apc มัน "compile" php เก็บไว้อยู่แล้วครับ
ไม่ได้ cache เฉพาะตัว variable นะครับ
ไอ้สารพัด function อะไรพวกนี้มันก็ compile แล้วยัดใส่ mem ของมันไว้ให้อัตโนมัติเลย
เพราะฉะนั้นมันจึงประหยัดเวลาในการประมวลผลไปได้ขั้นนึงเต็มๆ เลยครับ

ที่เราทำเพิ่มได้มีแค่ที่ด้านบนบอกไว้อะแหละ Cheesy
บันทึกการเข้า

THZHost SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ
han
สมุนแก๊งเสียว
*

พลังน้ำใจ: 2
ออฟไลน์ ออฟไลน์

กระทู้: 980



ดูรายละเอียด
« ตอบ #2 เมื่อ: 11 มกราคม 2008, 21:22:42 »

สำหรับผม ยิ่งอ่านยิ่งงง  Tongue
บันทึกการเข้า

payu
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 125
ออฟไลน์ ออฟไลน์

กระทู้: 1,887



ดูรายละเอียด
« ตอบ #3 เมื่อ: 11 มกราคม 2008, 21:42:07 »


งง .. จริงๆ ด้วย

บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,516



ดูรายละเอียด
« ตอบ #4 เมื่อ: 11 มกราคม 2008, 22:18:12 »

apc มัน "compile" php เก็บไว้อยู่แล้วครับ
ไม่ได้ cache เฉพาะตัว variable นะครับ
ไอ้สารพัด function อะไรพวกนี้มันก็ compile แล้วยัดใส่ mem ของมันไว้ให้อัตโนมัติเลย
เพราะฉะนั้นมันจึงประหยัดเวลาในการประมวลผลไปได้ขั้นนึงเต็มๆ เลยครับ

ที่เราทำเพิ่มได้มีแค่ที่ด้านบนบอกไว้อะแหละ Cheesy

อ้อ แปลว่าที่มันบอกว่า cache ที่ system นี้
มันได้ compile นอกเหนือตัวแปรเก็บไว้
แล้วแยกตัวแปรไว้ให้เราเลือก cache ต่างหาก

ผมเข้าใจถูกไหมครับ ?
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์