ทดสอบความเร็วการเขียน PHP ล้วน กับการเขียน PHP ปนกับ HTML
มีคำถามจากเพื่อนสมาชิกว่า ข้อเสียของการเขียน PHP ปนกับ HTML คืออะไร ซึ่งจริงๆผมเคยตอบเป็นบทความไปแล้ว แต่ที่ยังไม่เคยทำคือ ทดสอบว่า PHP ล้วนเร็วกว่า PHP + HTML จริงหรือไม่ มาลองทำการทดลองดู
ก่อนอื่นอธิบายก่อนว่าทำไมเราถึงไม่ควรเขียน PHP ปนกับ HTML
1. ปัญหาคลาสสิคของการเขียน PHP ปนกับ HTML คือการอ่านโค้ดยาก (ถึงยากมาก) โดยเฉพาะโค้ดที่ต้องมีการตัดสินใจ เช่น if ซึ่งบางทีอยู่ห่างออกไปอีกหลายบรรทัด (เนื่องจากต้องมี HTML คั่น) ทำให้การดูแลรักษาในภายหลัง ตลอดจนการตรวจสอบและแก้ไขข้อผิดพลาดทำได้ยากขึ้น
หนทางที่แนะนำ คือ เอามันซะอย่างใดอย่างหนึ่ง เช่นเขียน PHP ล้วน
หรือไม่ก็เลี่ยงไปใช้ Template ซึ่งถูกออกแบบมาเพื่อลดความซับซ้อนตรงนี้โดยตรง
ตัวอย่างไฟล์ template
การเรียก template มาใช้งาน
วิธีการจัดการกับ Template มีหลายวิธีนะครับ วิธีนี้เป็นวิธีที่ผมเลือกใช้
2. ความเร็วในการแปลภาษาของ PHP จะลดลง เนื่องจากต้องมีการจัดการสลับการประมวลผลไปมาระหว่างส่วนที่เป็น PHP และ HTML (เราจะมาพิสูจน์ข้อนี้กัน)
โค้ดด้านล่างคือโค้ดที่เราใช้ในการทดสอบ โค้ดไม่มีอะไรมาก ให้ผลลัพท์เหมือนๆกัน ต่างกันแค่วิธีเขียน
ผลการทดสอบ
จะเห็นว่า PHP ล้วนเร็วกว่าเกือบเท่าตัว
ก่อนอื่นอธิบายก่อนว่าทำไมเราถึงไม่ควรเขียน PHP ปนกับ HTML
1. ปัญหาคลาสสิคของการเขียน PHP ปนกับ HTML คือการอ่านโค้ดยาก (ถึงยากมาก) โดยเฉพาะโค้ดที่ต้องมีการตัดสินใจ เช่น if ซึ่งบางทีอยู่ห่างออกไปอีกหลายบรรทัด (เนื่องจากต้องมี HTML คั่น) ทำให้การดูแลรักษาในภายหลัง ตลอดจนการตรวจสอบและแก้ไขข้อผิดพลาดทำได้ยากขึ้น
หนทางที่แนะนำ คือ เอามันซะอย่างใดอย่างหนึ่ง เช่นเขียน PHP ล้วน
<?php
echo '<p>'.$content.'</p>';
?>
หรือไม่ก็เลี่ยงไปใช้ Template ซึ่งถูกออกแบบมาเพื่อลดความซับซ้อนตรงนี้โดยตรง
ตัวอย่างไฟล์ template
<p>{CONTENT}</p>
การเรียก template มาใช้งาน
<?php
// อ่านไฟล์ template
// $template = '<p>{CONTENT}</p>';
$template = file_get_contents('template.html);
// แทนที่ $content ลงในตำแหน่ง {CONTENT}
echo str_replace('{CONTENT}', $content, $template);
วิธีการจัดการกับ Template มีหลายวิธีนะครับ วิธีนี้เป็นวิธีที่ผมเลือกใช้
2. ความเร็วในการแปลภาษาของ PHP จะลดลง เนื่องจากต้องมีการจัดการสลับการประมวลผลไปมาระหว่างส่วนที่เป็น PHP และ HTML (เราจะมาพิสูจน์ข้อนี้กัน)
โค้ดด้านล่างคือโค้ดที่เราใช้ในการทดสอบ โค้ดไม่มีอะไรมาก ให้ผลลัพท์เหมือนๆกัน ต่างกันแค่วิธีเขียน
<?php
echo 'Current PHP version: ' . phpversion() . '<br>';
// PHP + HTML
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
?>
<span style="display:none"><?= $i ?></span>
<?php
}
echo '<br>' . (microtime(true) - $start) . ' PHP + HTML<br>';
// PHP Only
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
echo '<span style="display:none">' . $i . '</span>';
}
echo '<br>' . (microtime(true) - $start) . ' PHP Only<br>';
?>
ผลการทดสอบ
Current PHP version: 7.4.8
0.0060169696807861 PHP + HTML
0.0035500526428223 PHP Only
จะเห็นว่า PHP ล้วนเร็วกว่าเกือบเท่าตัว