A-AA+then

เนื่องจากผมกำลังออกแบบ PHP Framework เลยจำเป็นต้องหาวิธีการที่มีประสิทธิภาพที่สุด โดยหนึ่งในสิ่งที่ผมกำลังสงสัยในประสิทธิภาพของมันคือตัวแปร ซึ่งมีทั้งรูปแบบที่เป็น Array และ Object

รูปแบบแรกคือ 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
ทางด้านความเร็วผมให้ Array ชนะเลิศ ถึงแม้ว่าใน PHP คนละเวอร์ชั่นกันบางอัน StaticClass จะเร็วกว่า (ผมเรียงลำดับตามคะแนนเฉลี่ยของแต่ละแถว)

การใช้หน่วยความจำ
  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 และ stdClass อยู่เกือบเท่าตัว ยกเว้น PHP 5.3.29 ซึ่งใช้หน่วยความจำใกล้เคียงกันทั้ง 3 รูปแบบ

สรุป จากข้อมูลต่างๆด้านบน ผมให้ StaticClass ชนะเลิศ ถึงแม้ว่ามันจะทำความเร็วได้ไม่ดีเท่า Array ก็ตาม แต่เนื่องจากความแตกต่างด้านการใช้หน่วยความจำ ที่น้อยกว่ากันเกือบเท่าตัว จะมีผลให้เมื่อใช้งานจริง จะมีประสิทธิภาพดีกว่า โดยเฉพาะหากมีการใช้งานเว็บไซต์จำนวนมากพร้อมๆกัน

PHP

Relate

^