เปรียบเทียบความเร็วการใช้งาน Class และ Array
เนื่องจากผมกำลังออกแบบ PHP Framework เลยจำเป็นต้องหาวิธีการที่มีประสิทธิภาพที่สุด โดยหนึ่งในสิ่งที่ผมกำลังสงสัยในประสิทธิภาพของมันคือตัวแปร ซึ่งมีทั้งรูปแบบที่เป็น Array และ Object
รูปแบบแรกคือ Array ผมออกแบบการทดสอบไว้ตามนี้
รูปแบบที่สอง เป็นตัวแปรแบบ Object Class ซึ่งมีการเขียนโค้ดเพื่อเตรียม Class ไว้ก่อนแล้ว (เช่นการเขียน Class แบบทั่วๆไป)
แบบสุดท้ายคือ stdClass ซึ่งเป็น Object Class ที่สร้างขึ้นในหน่วยความจำขณะรัน
ผลการทดสอบครั้งนี้ได้ความร่วมมือจากหลายๆคนช่วยทดสอบให้ ซึ่งผมสรุปผลการทดสอบดังตาราง (รายการแรกคือรายการที่ดีที่สุด)
ทดสอบความเร็วในการประมวลผล
ทางด้านความเร็วผมให้ Array ชนะเลิศ ถึงแม้ว่าใน PHP คนละเวอร์ชั่นกันบางอัน StaticClass จะเร็วกว่า (ผมเรียงลำดับตามคะแนนเฉลี่ยของแต่ละแถว)
การใช้หน่วยความจำ
StaticClass จะใช้หน่วยความจำน้อยกว่า Array และ stdClass อยู่เกือบเท่าตัว ยกเว้น PHP 5.3.29 ซึ่งใช้หน่วยความจำใกล้เคียงกันทั้ง 3 รูปแบบ
สรุป จากข้อมูลต่างๆด้านบน ผมให้ StaticClass ชนะเลิศ ถึงแม้ว่ามันจะทำความเร็วได้ไม่ดีเท่า Array ก็ตาม แต่เนื่องจากความแตกต่างด้านการใช้หน่วยความจำ ที่น้อยกว่ากันเกือบเท่าตัว จะมีผลให้เมื่อใช้งานจริง จะมีประสิทธิภาพดีกว่า โดยเฉพาะหากมีการใช้งานเว็บไซต์จำนวนมากพร้อมๆกัน
รูปแบบแรกคือ Array ผมออกแบบการทดสอบไว้ตามนี้
for ($i = 0; $i < 1000; $i++) {
$z = array();
for ($j = 0; $j < 1000; $j++) {
$z['aaa'] = 'aaa';
$z['bbb'] = 'bbb';
$z['ccc'] = $z['aaa'].$z['bbb'];
}
$arraysOf[] = $z;
}
รูปแบบที่สอง เป็นตัวแปรแบบ Object Class ซึ่งมีการเขียนโค้ดเพื่อเตรียม Class ไว้ก่อนแล้ว (เช่นการเขียน Class แบบทั่วๆไป)
class StaticClass
{
public $aaa;
public $bbb;
public $ccc;
}
for ($i = 0; $i < 1000; $i++) {
$z = new StaticClass();
for ($j = 0; $j < 1000; $j++) {
$z->aaa = 'aaa';
$z->bbb = 'bbb';
$z->ccc = $z->aaa.$z->bbb;
}
$arraysOf[] = $z;
}
แบบสุดท้ายคือ stdClass ซึ่งเป็น Object Class ที่สร้างขึ้นในหน่วยความจำขณะรัน
for ($i = 0; $i < 1000; $i++) {
$z = new stdClass();
for ($j = 0; $j < 1000; $j++) {
$z->aaa = 'aaa';
$z->bbb = 'bbb';
$z->ccc = $z->aaa.$z->bbb;
}
$arraysOf[] = $z;
}
ผลการทดสอบครั้งนี้ได้ความร่วมมือจากหลายๆคนช่วยทดสอบให้ ซึ่งผมสรุปผลการทดสอบดังตาราง (รายการแรกคือรายการที่ดีที่สุด)
ทดสอบความเร็วในการประมวลผล
5.6.8 | 5.5.12 | 5.4.7 | 5.3.29 | |
---|---|---|---|---|
Array | 0.57624 | 0.67188 | 0.60559 | 0.42420 |
StaticClass | 0.75953 | 0.66149 | 0.48909 | 0.56504 |
stdClass | 0.98994 | 0.76758 | 0.67288 | 0.48096 |
การใช้หน่วยความจำ
5.6.8 | 5.5.12 | 5.4.7 | 5.3.29 | |
---|---|---|---|---|
StaticClass | 275712 | 407576 | 471567 | 879440 |
Array | 460408 | 752768 | 840792 | 840712 |
stdClass | 483656 | 799480 | 887416 | 879560 |
สรุป จากข้อมูลต่างๆด้านบน ผมให้ StaticClass ชนะเลิศ ถึงแม้ว่ามันจะทำความเร็วได้ไม่ดีเท่า Array ก็ตาม แต่เนื่องจากความแตกต่างด้านการใช้หน่วยความจำ ที่น้อยกว่ากันเกือบเท่าตัว จะมีผลให้เมื่อใช้งานจริง จะมีประสิทธิภาพดีกว่า โดยเฉพาะหากมีการใช้งานเว็บไซต์จำนวนมากพร้อมๆกัน