เปรียบเทียบความเร็วในการใช้งานฟังก์ชั่น empty() และ isset()

บทความนี้เป็นการทดสอบเปรียบเทียบความเร็วในการใช้งานฟังก์ชั่น empty() และ isset() กับตัวแปรประเภทต่างๆ

ผลการทดสอบบน PHP 4 เวอร์ชั่นบนเครื่องเดียวกัน

Current PHP version: 5.2.17                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
emptyisset
string ว่างเปล่า0.0131687760353090.012722826004028
ตัวเลข 00.013314795494080.012506699562073
แอเรย์ ว่างเปล่า0.0131627678871150.012456941604614
string ไม่ว่าง0.0131114602088930.012779915332794
ตัวเลข 10.0125258803367610.012289130687714
แอเรย์ มีสมาชิก0.012722694873810.012173902988434
ไม่มีตัวแปร0.00884801149368290.0088397860527039

Current PHP version: 5.4.45                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
emptyisset
string ว่างเปล่า0.00563375949859620.0069453954696655
ตัวเลข 00.00711838006973270.0066091299057007
แอเรย์ ว่างเปล่า0.0067799568176270.0064022779464722
string ไม่ว่าง0.00591844320297240.0061661601066589
ตัวเลข 10.00604441165924070.0081516623497009
แอเรย์ มีสมาชิก0.00626207590103150.0066883444786072
ไม่มีตัวแปร0.00676804780960080.0072224020957947

Current PHP version: 5.6.14                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
emptyisset
string ว่างเปล่า0.00534850358963010.0050637006759644
ตัวเลข 00.00523835420608520.0049368143081665
แอเรย์ ว่างเปล่า0.0052673459053040.0050349116325378
string ไม่ว่าง0.00472162961959840.004958975315094
ตัวเลข 10.00457477569580080.0048004508018494
แอเรย์ มีสมาชิก0.00455846786499020.0047675609588623
ไม่มีตัวแปร0.00513486862182620.0046244025230408

Current PHP version: 7.1.0-dev                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
emptyisset
string ว่างเปล่า0.00263119935989380.0022942423820496
ตัวเลข 00.00255196094512940.0022835612297058
แอเรย์ ว่างเปล่า0.0025292396545410.0022364735603333
string ไม่ว่าง0.00271601676940920.0022122144699097
ตัวเลข 10.00259095430374150.0021446228027344
แอเรย์ มีสมาชิก0.00252522230148320.0021265029907227
ไม่มีตัวแปร0.00215934514999390.0023514270782471

จากผลการทดสอบ จะเห็นว่าทั้ง empty และ isset ไม่ต่อยแตกต่างกันมากนักนะครับ

โค้ดที่ใช้ในการทดสอบ
// จำนวนครั้งการทดสอบ
$max = 100000;
// จำนวนรอบการทดสอบ ผลลัพท์เฉลี่ยจากค่านี้
$count = 20;
// แอเรย์เก็บผลลัพท์
$ret = array();
// ข้อมูล
$s = '';
$ss = 's';
$n = 0;
$nn = 1;
$a = array();
$aa = array(1, 2, 3);
$ret = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,);
for ($m = 0; $m < $count; $m++) {
    // string ว่างเปล่า
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (empty($s)) {

        }
    }
    $ret[0] += microtime(true) - $start;
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (isset($s)) {

        }
    }
    $ret[1] += microtime(true) - $start;

    // ตัวเลข 0
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (empty($n)) {

        }
    }
    $ret[2] += microtime(true) - $start;
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (isset($n)) {

        }
    }
    $ret[3] += microtime(true) - $start;

    // แอเรย์ ว่างเปล่า
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (empty($a)) {

        }
    }
    $ret[4] += microtime(true) - $start;
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (isset($a)) {

        }
    }
    $ret[5] += microtime(true) - $start;

    // string ไม่ว่าง
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (empty($ss)) {

        }
    }
    $ret[6] += microtime(true) - $start;
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (isset($ss)) {

        }
    }
    $ret[7] += microtime(true) - $start;

    // ตัวเลข 1
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (empty($nn)) {

        }
    }
    $ret[8] += microtime(true) - $start;
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (isset($nn)) {

        }
    }
    $ret[9] += microtime(true) - $start;

    // แอเรย์ มีสมาชิก
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (empty($aa)) {

        }
    }
    $ret[10] += microtime(true) - $start;
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (isset($aa)) {

        }
    }
    $ret[11] += microtime(true) - $start;

    // ไม่มีตัวแปร
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (empty($null)) {

        }
    }
    $ret[12] += microtime(true) - $start;
    $start = microtime(true);
    for ($z = 0; $z < $max; $z++) {
        if (isset($null)) {

        }
    }
    $ret[13] += microtime(true) - $start;

    usleep(10240);
}
echo 'Current PHP version: '.phpversion().'<br>';
echo '<table class="data border">';
echo '<tr><th></th><th>empty</th><th>isset</th></tr>';
echo '<tr><th>string ว่างเปล่า</th><td>'.($ret[0] / $count).'</td><td>'.($ret[1] / $count).'</td></tr>';
echo '<tr><th>ตัวเลข 0</th><td>'.($ret[2] / $count).'</td><td>'.($ret[3] / $count).'</td></tr>';
echo '<tr><th>แอเรย์ ว่างเปล่า</th><td>'.($ret[4] / $count).'</td><td>'.($ret[5] / $count).'</td></tr>';
echo '<tr><th>string ไม่ว่าง</th><td>'.($ret[6] / $count).'</td><td>'.($ret[7] / $count).'</td></tr>';
echo '<tr><th>ตัวเลข 1</th><td>'.($ret[8] / $count).'</td><td>'.($ret[9] / $count).'</td></tr>';
echo '<tr><th>แอเรย์ มีสมาชิก</th><td>'.($ret[10] / $count).'</td><td>'.($ret[11] / $count).'</td></tr>';
echo '<tr><th>ไม่มีตัวแปร</th><td>'.($ret[12] / $count).'</td><td>'.($ret[13] / $count).'</td></tr>';
echo '</table>';

ผู้เขียน Goragod

โพสต์เมื่อ 11 ธ.ค. 2558

ความคิดเห็น 0

เปิดดู 590

ป้ายกำกับ benchmark

Related

^