เปรียบเทียบความเร็วการใช้งาน Class และ Array

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

การใช้หน่วยความจำ                                                                                                                                                                                                                                                                                                                                                                
 5.6.85.5.125.4.75.3.29
StaticClass275712407576471567879440
Array460408752768840792840712
stdClass483656799480887416879560
StaticClass จะใช้หน่วยความจำน้อยกว่า Array และ stdClass อยู่เกือบเท่าตัว ยกเว้น PHP 5.3.29 ซึ่งใช้หน่วยความจำใกล้เคียงกันทั้ง 3 รูปแบบ

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

เรื่องที่เกี่ยวข้อง

^