เปรียบเทียบความเร็วในการเข้าถึงข้อมูลของตัวแปรแอเรย์ กับ property ของ Object

ในการทดสอบนี้ จะมีการเตรียมตัวแปรแอเรย์ และอ๊อบเจ็คก่อนทำการวนลูปเพื่อทดสอบ (ตรวจสอบการเข้าถึงข้อมูลเพียงอย่างเดียว)

แบบที่หนึ่ง การเข้าถึงข้อมูลประเภท Object
$x = $y->a;

แบบที่สอง การเข้าถึงข้อมูลประเภท Array
$x = $y['a'];

ผลการทดสอบบน PHP 4 เวอร์ชั่น ในเครื่องเดียวกัน
Current PHP version: 5.2.17
0.002082896232605 (object)
0.0015032887458801 (array)

Current PHP version: 5.4.45
0.00058697793960571 (object)
0.00055904720306396 (array)

Current PHP version: 5.6.14
0.00055110454559326 (object)
0.00051929950714111 (array)

Current PHP version: 7.1.0-dev
0.00032248497009277 (object)
0.00047236680984497 (array)

ผลการทดสอบจะเห็นว่า PHP5.2 มี Performance ต่ำที่สุด โดยห่างจาก PHP7 อยู่พอสมควร ในขณะที่ PHP ตั้งแต่ 5.4 ขึ้นมาแทบไม่มีการพัฒนาเลย และใน PHP5 ทั้งหมดที่ทดสอบ Array มี Performance ดีกว่า Object อยู่เล็กน้อย ซึ่งจะแตกต่างจาก PHP7 ซึ่ง Performance ของ Object ดีกว่าของ Array อยู่พอสมควรทีเดียว ทำให้ PHP7 นี่เหมาะกับการเขียนแบบ OOP ที่สุด

โค้ดที่ใช้ในการทดสอบ
// ตัวแปรสำหรับการทดสอบ
$array = array(
    'a' => 1,
    'b' => 2,
    'c' => 3,
    'd' => 4,
    'e' => 5,
    'f' => 6,
    'g' => 7,
    'h' => 8,
    'i' => 9
);
class Test
{
    public $a = 1;
    public $b = 2;
    public $c = 3;
    public $d = 4;
    public $e = 5;
    public $f = 6;
    public $g = 7;
    public $h = 8;
    public $i = 9;
}
// จำนวนครั้งการทดสอบ
$max = 1000;
// จำนวนรอบในการทดสอบ ผลการทดสอบเฉลี่ยจากค่านี้
$count = 20;
for ($m = 0; $m < $count; $m++) {
    // test 1
    $y = new Test;
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        $x = $y->a;
        $x = $y->b;
        $x = $y->c;
        $x = $y->d;
        $x = $y->e;
        $x = $y->f;
        $x = $y->g;
        $x = $y->h;
        $x = $y->i;
    }
    $n += microtime(true) - $start;
    $y = null;

    // test 2
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        $x = $array['a'];
        $x = $array['b'];
        $x = $array['c'];
        $x = $array['d'];
        $x = $array['e'];
        $x = $array['f'];
        $x = $array['g'];
        $x = $array['h'];
        $x = $array['i'];
    }
    $o += microtime(true) - $start;

    sleep(1);
}
echo 'Current PHP version: '.phpversion().'<br><br>';
echo ($n / $count).' (object)<br>';
echo ($o / $count).' (array)<br>';

 
ผู้เขียน goragod โพสต์เมื่อ 04 ธ.ค. 2558 เปิดดู 3,399 ป้ายกำกับ benchmark
^