คลาสวัดสมรรถนะ (Benchmarking Class)
CodeIgniter ได้เตรียมคลาสวัดสมถรรนะไว้ให้คุณ, โดยการเปิดใช้งาน เพื่อจับระยะเวลาของตำแหน่งสองตำแหน่งและนำมาคำนวณเวลาที่ต่างกัน.
ข้อสังเกตุ: class นี้ถูกทำงานโดยอัตโนมัติ โดยคุณไม่ต้องเปิดใช้งานเอง.
ส่วนเพิ่มเติม, การวัดสมรรถนะจะเริ่มทำงานตลอดเวลาทุกครั้งที่เฟรมเวิร์คมีการเรียกใช้งาน, และจบที่คลาส output เพื่อแสดงผลสุดท้ายให้ view นำไปแสดงในเว็บเบราเซอร์, เป็นวิธีการที่ทำให้ได้ระยะเวลาในการทำงานของระบบที่แม่นยำมาก.
ตารางเนื้อหา
- การใช้งาน Benchmark Class
- กำหนดกระบวนการ Benchmark ของคุณ
- แสดงผลของระยะเวลาการทำคำสั่ง
- แสดงผลการใช้ทรัพยากรเมมโมรี่ (Memory Consumption)
การใช้งานคลาสวัดสมรรถนะ
Benchmark class สามารถใช้ได้ใน ตัวควบคุม(controllers), ส่วนแสดง(views), หรือใน แบบจำลอง(Models) ของคุณ. โดยมีวิธีการใช้ดังนี้:
- กำหนดตำแหน่งเริ่มต้นทำงาน
- กำหนดตำแหน่งสิ้นสุดการทำงาน
- ใช้ฟังก์ชั่น "elapsed time" เพื่อแสดงผลลัพธ์ที่ได้
นี่คือตัวอย่างการใช้งานจริง:
$this->benchmark->mark('code_start');
// โค้ดที่ใช้ประมวลผลอื่นๆ ของคุณ
$this->benchmark->mark('code_end');
echo $this->benchmark->elapsed_time('code_start', 'code_end');
ข้อสังเกตุ: คำว่า "code_start" และ "code_end" ไม่ใช่คำที่จำเป็นต้องใช้. เหล่านี้เป็นคำตัวอย่างง่ายๆ ให้คุณเห็นการสร้างตำแหน่งทั้งสองจุด. คุณสามารถใช้คำใดๆ ก็ได้ตามที่คุณต้องการ, และคุณสามารถกำหนดให้ใช้งานได้หลายๆ ตำแหน่ง. ตามตัวอย่างนี้:
$this->benchmark->mark('dog');
// โค้ดที่ใช้ประมวลผลอื่นๆ ของคุณ
$this->benchmark->mark('cat');
// โค้ดที่ใช้ประมวลผลอื่นๆ ของคุณ
$this->benchmark->mark('bird');
echo $this->benchmark->elapsed_time('dog', 'cat');
echo $this->benchmark->elapsed_time('cat', 'bird');
echo $this->benchmark->elapsed_time('dog', 'bird');
กำหนดกระบวนการวัดสมถรรนะของคุณ
ถ้าคุณต้องการกำหนดช่วงข้อมูลการ benchmark ของคุณ ให้คุณลองใช้งานในรูปแบบของ ตัวรวมข้อมูล(Profiler) เพื่อกำหนดตำแหน่งทั้งหมดเป็นคู่ๆ , และทำการกำหนดต่อท้ายชื่อด้วยคำว่า _start และ _end. ให้เป็นคู่ของตำแหน่งนั้นๆ ตัวอย่างเช่น:
$this->benchmark->mark('my_mark_start');
// โค้ดที่ใช้ประมวลผลอื่นๆ ของคุณ
$this->benchmark->mark('my_mark_end');
$this->benchmark->mark('another_mark_start');
// โค้ดที่ใช้ประมวลผลอื่นๆ ของคุณ
$this->benchmark->mark('another_mark_end');
โปรดอ่านในหน้า Profiler เพื่อดูข้อมูลเพิ่มเติม.
แสดงผลของระยะเวลาการทำคำสั่ง
ถ้าคุณต้องการแสดงผลของเวลาที่ได้ทำงานผ่านมาแล้ว (elapsed time) จาก CodeIgniter ในขณะนั้น ไปจนถึงการแสดงผลลัพธ์ครั้งสุดท้ายที่เบราเซอร์, วิธีง่ายๆ ในการนำไปแสดงในโครงสร้างของ view (view template) คือ:
<?php echo $this->benchmark->elapsed_time();?>
คุณจะสังเกตุได้ว่ามันเหมือนกับฟังก์ชั่นที่เคยได้ยกตัวอย่างไปข้างต้น ที่นะมาคำนวณระยะเวลาของตำแหน่งสองตำแหน่ง, เพียงแต่คุณจะ ไม่ใช้ parameters ใดๆ. เมื่อใดที่คุณไม่ระบุ parameters, CodeIgniter จะไม่หยุดทำการ benchmark จนกว่าจะสิ้นสุดการทำงาน และนำไปแสดงผลลัพธ์ที่จะส่งให้เว็บเบราเซอร์. หมายความว่าจะมีการคำนวณระยะเวลาทั้งหมด โดยไม่เจาะจงแค่บางคำสั่ง
อีกทางหนึ่งคุณสามารถแสดง elapsed time ของคุณใน view โดยการใช้ pseudo-variable, ถ้าคุณไม่ได้เขียนโค๊ดแบบ PHP ปกติ:
{elapsed_time}
ข้อสังเกตุ:ถ้าคุณต้องการวัดสมรรถนะ ฟังก์ชั่นต่างๆ ใน controller ของคุณ คุณต้องระบุ ตำแหน่งเริ่มต้น/ตำแหน่งสิ้นสุด ด้วย.
แสดงผลการใช้ทรัพยากรเมมโมรี่ (Memory Consumption)
ถ้า PHP ของคุณ ได้ติดตั้งผ่านการคอนฟิก (config) ด้วย --enable-memory-limit, คุณสามารถแสดงผลการใช้ทรัพยากรเมมโมรี่ (Memory Consumption) ว่าถูกระบบใช้งานไปกับคำสั่งเหล่านั้นไปเท่าไร โดยการระบุคำสั่งด้านล่างในไฟล์ view ดังนี้:
<?php echo $this->benchmark->memory_usage();?>
ข้อสังเกตุ: ฟังก์ชั่นนี้ใช้ได้ในไฟล์ view เท่านั้น. แสดงผลการใช้ทรัพยากรจะสะท้อนถึงการใช้งานเมมโมรี่ทั้งหมดในระบบ.
อีกทางหนึ่งคุณสามารถแสดงผลการใช้ทรัพยากรเมมโมรี่ ของคุณใน view โดยการใช้ pseudo-variable, ถ้าคุณไม่ได้เขียนโค๊ดแบบ PHP ปกติ:
{memory_usage}