เขียน PHP CodeIgniter Framework การใช้ Class BenchMark

เขียน PHP CodeIgniter Framework การใช้ Class BenchMark

เวลาเราพัฒนา web site หรือ web application นั้นบางครั้งเราก็ต้องการทดสอบความเร็วในการทำงาน หรือจำนวนหน่วยความจำที่เราใช้ และเจ้า CodeIgniter นั้นก็มี class ที่มีมาให้สำหรับทำการทดสอบ benchmark ไว้ให้แล้ว โดยการใช้งานนั้นก็ไม่ได้ยากอะไร เรามาดูกันดีกว่าว่าใช้กันยังไง

เริ่มแรกผมทำการสร้าง class Controller ที่มีชื่อว่า TestBenchMark

1

จากนั้นก็มี code ดังนี้

[sourcecode language=”php”]

‘;
$this->benchmark->mark(‘count_start’);
$i = 0;
while($i <= 100000) { $i++; } $this->benchmark->mark(‘count_end’);
echo ‘elapsed_time :  ‘ . $this->benchmark->elapsed_time(‘count_start’,’count_end’) . ‘
‘;

}
}

?>

[/sourcecode]

เมื่อลองรันก็จะได้ดังรูป

เขียน PHP CodeIgniter Framework การใช้ Class BenchMark

จะเห็นว่าโค้ดตัวอย่างนั้นใช้เวลาในการวนลูป 0.0220 วินาที การใช้งานหลักๆคือจะใช้คำสั่ง

$this->benchmark->mark(‘จุดเริ่มต้น’) และใช้อีกครั้งในโค้ดส่วนที่เราต้องการวัดความเร็ว $this->benchmark->mark(‘จุดสิ้นสุด’) โดย parameter ที่ส่งไปให้ function mark นั้นจะเป็นชื่อที่เรากำหนด เราสามารถตั้งชื่อจุด mark ได้หลายจุดโดยให้ทำการเติม _start และ _end ในจุดเริ่มต้นและสิ้นสุด

ลองแก้โค้ดใหม่ให้มีจุด mark  2 จุด

[sourcecode language=”php”]

‘;

$this->benchmark->mark(‘count1_start’);
$i = 0;
while($i <= 100000) { $i++; } $this->benchmark->mark(‘count1_end’);
echo ‘elapsed_time count 1 :  ‘ . $this->benchmark->elapsed_time(‘count1_start’,’count1_end’) . ‘
‘;

$this->benchmark->mark(‘count2_start’);
$i = 0;
while($i <= 100000) { $i++; } $this->benchmark->mark(‘count2_end’);
echo ‘elapsed_time count2:  ‘ . $this->benchmark->elapsed_time(‘count2_start’,’count2_end’) . ‘
‘;
echo ‘elapsed_time count1 – count2:  ‘ . $this->benchmark->elapsed_time(‘count1_start’,’count2_end’) . ‘
‘;
}
}
?>

[/sourcecode]

3

หลังจากที่เราทดสอบการใช้เวลาแล้วก็ลองดูว่าใช้หน่วยความจำ memory เท่าไรโดยคำสั่งในการวัด memory นั้นคือ $this->benchmark->memory_usage()

แต่ function นี้จะให้ output ในหน้าของ view ดังนั้นเราเลยต้องสร้าง ไฟล์ view ขึ้นมาโดยผมจะทำการสร้างไฟล์ view ที่ชื่อว่า benchmark.php

4

โดยมีโค้ดดังนี้

[sourcecode language=”php”]

benchmark->memory_usage() . ‘
‘;
echo ‘total elapsed_time :  ‘ .$this->benchmark->elapsed_time();
?>

[/sourcecode]

เมื่อสร้างไฟล์ view เสร็จแล้วให้เราทำการเพิ่มโค้ดในส่วนของ controller เพื่อเรียกไฟล์ view ดังนี้

[sourcecode language=”php”]

$this->load->view(‘benchmark’);

[/sourcecode]

ซึ่ง function memory_usage นั้นจะให้ผลของการใช้ memory ในหน้า view นอกจากนั้นแล้ว function elapsed_time นั้นถ้าไม่ใส่จุด mark มันก็จะให้ผมลัพธ์ทั้งหมดในหน้า page แต่ก็จะแสดงผลเฉพาะในหน้า view เหมือนกัน

6

ผลลัพธ์การรัน

จากโค้ดตัวอย่างที่ผ่านมานั้นจะเป็นการใช้แบบทั่วไปตามแต่ละคนจะใช้กัน และต่อไปยังมีอีก 1 คำสั่ง function ที่จะทำให้การ benchmark โดยรวมได้ง่ายขึ้นคือ function $this->output->enable_profiler(TRUE);

จะเป็นการสรุปการทำงานโดยรวมทั้งหมดในหน้าเพจนั้นๆโดยโค้ดตัวอย่างทั้งหมดในไฟล์ testbenchmark.php มีดังนี้

[sourcecode language=”php”]

‘;

$this->output->enable_profiler(TRUE);
$this->benchmark->mark(‘count1_start’);
$i = 0;
while($i <= 100000) { $i++; } $this->benchmark->mark(‘count1_end’);
echo ‘elapsed_time count 1 :  ‘ . $this->benchmark->elapsed_time(‘count1_start’,’count1_end’) . ‘
‘;

$this->benchmark->mark(‘count2_start’);
$i = 0;
while($i <= 100000) { $i++; } $this->benchmark->mark(‘count2_end’);
echo ‘elapsed_time count2:  ‘ . $this->benchmark->elapsed_time(‘count2_start’,’count2_end’) . ‘
‘;
echo ‘elapsed_time count1 – count2:  ‘ . $this->benchmark->elapsed_time(‘count1_start’,’count2_end’) . ‘
‘;
$this->load->view(‘benchmark’);
}
}

?>

[/sourcecode]

7

เมื่อลองรันดูก็จะได้ดังรูป ซึ่งสังเกตว่า ในตารางส่วนของ BENCHMARKS  นั้นจะมีชื่อ Count1 กับ Count2 อยู่ด้วยซึ่งจุดสำคัญคือการตั้งชื่อจุด mark นั้นจะต้องมี _start กับ _end เพื่อบอกจุดเริ่มต้นกับสิ้นสุด เมื่อเราใช้คำสั่ง $this->output->enable_profiler(TRUE); นั้นจะมีตารางสรุปหลายตารางออกมานอกจาก benchmark แล้วยังมีพวก GET, POST Data และ URI, QUERIES, HTTP HEADERS เป็นต้นซึ่งถือว่า class Benchmark กับการใช้ enable_profiler ของ CodeIgniter นั้นมีประโยชน์มากที่เดียวในการพัฒนา website หรือ webapplication เลยทีเดียว

Download SourceCode

Leave a Reply

Your email address will not be published. Required fields are marked *