เปรียบเทียบความเร็วในการตรวจหาตัวแปรว่าง
ในบทความนี้เป็นการทดสอบการเปรียบเทียบตัวแปรด้วย == และ === และ empty() ในการตรวจสอบว่าตัวแปรว่างหรือไม่ โดยมีการทดสอบทั้งกรณีที่ตัวแปรว่างเปล่า (ไม่มีข้อมูล) และหากตัวแปรไม่ว่างด้วย (มีข้อมูล)
ผลการทดสอบบน PHP 4 เวอร์ชั่นในเครื่องเดียวกัน
Current PHP version: 5.2.17
ไม่มีข้อมูล | มีข้อมูล | |
---|---|---|
== | 0.0018908262252808 | 0.0018590688705444 |
=== | 0.0016133189201355 | 0.0011244058609009 |
empty | 0.0016825318336487 | 0.0016883373260498 |
Current PHP version: 5.4.45
ไม่มีข้อมูล | มีข้อมูล | |
---|---|---|
== | 0.00074447393417358 | 0.0011142015457153 |
=== | 0.00095705986022949 | 0.00055713653564453 |
empty | 0.00060708522796631 | 0.00054726600646973 |
Current PHP version: 5.6.14
ไม่มีข้อมูล | มีข้อมูล | |
---|---|---|
== | 0.00072180032730103 | 0.0010463237762451 |
=== | 0.00094630718231201 | 0.00053664445877075 |
empty | 0.00056822299957275 | 0.00052398443222046 |
Current PHP version: 7.1.0-dev
ไม่มีข้อมูล | มีข้อมูล | |
---|---|---|
== | 0.00031790733337402 | 0.0010286331176758 |
=== | 0.00038250684738159 | 0.00038677453994751 |
empty | 0.00034124851226807 | 0.00036451816558838 |
ผมสรุปผลการทดสอบแบบนี้นะครับ
เครื่องหมาย == ใช้ทดสอบตัวแปรว่างได้เร็วกว่า ถ้าตัวแปรว่าง (ยกเว้น PHP5.2 ที่ให้ผลการทดสอบพอๆกัน)
เครื่องหมาย === ใช้ทดสอบตัวแปรไม่ว่างได้เร็วกว่า (ยกเว้น PHP7 ที่ให้ผลลัพท์พอๆกัน)
ฟังก์ชั่น empty() ใช้ทดสอบตัวแปรว่างเปล่า ได้ความเร็วพอๆกันทั้งกรณีทีตัวแปรว่างและไม่ว่าง (ผมให้คะแนนฟังก์ชั่นนี้ชนะเลิศนะ)
โค้ดที่ใช้ในการทดสอบ
// จำนวนครั้งการทดสอบ
$max = 10000;
// จำนวนรอบการทดสอบ ผลลัพท์เฉลี่ยจากค่านี้
$count = 20;
// แอเรย์เก็บผลลัพท์
$ret = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
// ข้อมูล
$y = '';
$x = 'ตัวแปรที่มีข้อมูล';
for ($m = 0; $m < $count; $m++) {
// ใช้งาน == เปรียบเทียบตัวแปรที่ไม่มีมีข้อมูล
$start = microtime(true);
for ($z = 0; $z < $max; $z++) {
if ($y == '') {
}
}
$ret[0] += microtime(true) - $start;
// ใช้งาน === เปรียบเทียบตัวแปรที่ไม่มีมีข้อมูล
$start = microtime(true);
for ($z = 0; $z < $max; $z++) {
if ($y === '') {
}
}
$ret[1] += microtime(true) - $start;
// ใช้งาน empty เปรียบเทียบตัวแปรที่ไม่มีมีข้อมูล
$start = microtime(true);
for ($z = 0; $z < $max; $z++) {
if (empty($y)) {
}
}
$ret[2] += microtime(true) - $start;
// ใช้งาน == เปรียบเทียบตัวแปรที่มีข้อมูล
$start = microtime(true);
for ($z = 0; $z < $max; $z++) {
if ($x == '') {
}
}
$ret[4] += microtime(true) - $start;
// ใช้งาน === เปรียบเทียบตัวแปรที่มีข้อมูล
$start = microtime(true);
for ($z = 0; $z < $max; $z++) {
if ($x === '') {
}
}
$ret[5] += microtime(true) - $start;
// ใช้งาน empty เปรียบเทียบตัวแปรที่มีข้อมูล
$start = microtime(true);
for ($z = 0; $z < $max; $z++) {
if (empty($x)) {
}
}
$ret[6] += microtime(true) - $start;
usleep(10240);
}
echo 'Current PHP version: '.phpversion().'<br>';
echo '<table border=solid width=400px>';
echo '<tr><th></th><th>ไม่มีข้อมูล</th><th>มีข้อมูล</th></tr>';
echo '<tr><th>==</th><td>'.($ret[0] / $count).'</td><td>'.($ret[4] / $count).'</td></tr>';
echo '<tr><th>===</th><td>'.($ret[1] / $count).'</td><td>'.($ret[5] / $count).'</td></tr>';
echo '<tr><th>empty</th><td>'.($ret[2] / $count).'</td><td>'.($ret[6] / $count).'</td></tr>';
echo '</table>';