เรื่อง : เขียนโปรแกรม PHP อย่างไรให้ทำงานได้อย่างรวดเร็ว
เคยเข้าไปอ่านบทความของฝรั่ง (Eng) เขามา เรื่องของการพิสูจน์แล้วนำมาแนะนำว่า... เราจะมีการเลือกใช้ไวยากรณ์ของภาษาโปรแกรมมิ่งอย่างไรให้โปรแกรมที่เราพัฒนามีการทำงานได้รวดเร็วและไว เพราะโปรแกรมที่สามารถรันได้ไว ย่อมหมายถึง Performance ที่ดีของโปรแกรม วันนี้ได้เวลาสงสัยต่อมาว่า...จะจริงอย่างที่เขาเขียนแนะนำในบทความหรือไม่ เลยมาทดสอบเขียนโปรแกรมพิสูจน์เอง (การเชื่อโดยไม่มีการพิสูจน์ด้วยตนเอง จะเป็นการงมงายมากกว่าเรื่องจริง) มาลองดูกันนะครับ หรือใครจะเอาโค้ดที่ผมใช้ในการทดสอบไปรันเพื่อพิสูนจ์ด้วยตนเองก็ได้ครับ
Function ที่ใช้ในการจับเวลาการทำงานของโปรแกรม
function getTime(){
list($mc, $sc) = explode(" ", microtime());
// microtime() จะส่งค่ากลับมาเป็น micro seconds กับ seconds โดยที่ 2 ค่านี้ถูกแบ่งด้วยช่องว่าง
return (float)$sc + (float)$mc;
// ได้เวลาออกมาเป็น วินาที + ไมโครวินาที
}
FOR…WHILE…DO WHILE วนรอบแบบไหนเร็วกว่ากัน
Code ที่ผมใช้ในการทดสอบสำหรับกรณีการวนรอบ (Loop)
For Loop
$time1 = getTime();
for ($i=1;$i<=10000000;$i++) {
$ii=$i;
}
$time2 = getTime();
$resultTime=($time2)-($time1);
echo ($resultTime);
2.0739099979401
While Loop
$i=1;
$time1 = getTime();
while($i<=10000000){
$ii=$i;
$i++;
}
$time2 = getTime();
$resultTime=($time2)-($time1);
echo ($resultTime);
1.8855090141296
Do..While Loop
$i=1;
$time1 = getTime();
do {
$ii=$i;
$i++;
} while($i<=10000000);
$time2 = getTime();
$resultTime=($time2)-($time1);
echo ($resultTime);
1.8340249061584
โปรแกรมทดสอบข้างต้น ผมเขียนให้มีการวนลูปจำนวน 10,000,000 รอบ (สิบล้านรอบ) จากทั้ง 3 รูปแบบการวนรอบ (Loop) ผลสรุปที่ได้ คือ เวลาที่แสดงในตารางข้างต้น ซึ่งมีหน่วยเป็นวินาที (seconds) การวนรอบเรียงลำดับการทำงานที่เร็วที่สุดไปยังช้าที่สุด คือ
- do…while loop
- while loop
- for loop
การใช้คำสั่งแสดงผล echo กับ print อะไรเร็วกว่ากัน
Echo
$i=1;
$time1 = getTime();
while($i<=3000){
echo $i;
$i++;
}
$time2 = getTime();
$resultTime=($time2)-($time1);
echo ($resultTime);
0.046799898147583
Print
$i=1;
$time1 = getTime();
while($i<=3000){
print $i;
$i++;
}
$time2 = getTime();
$resultTime=($time2)-($time1);
print ($resultTime);
0.046800136566162
ผลการทดสอบได้ออกมาว่า คำสั่ง print ได้เวลาการรันที่มากกว่า echo ซึ่งหมายความว่าคำสั่ง echo มีการทำงานได้ไวกว่า print ผมทดสอบที่การวน 3,000 รอบ
การใช้งานเครื่องหมาย Quote กับข้อมูลที่เป็น String รูปแบบ
Single Quoted หรือ Double Quoted ทำงานได้ไวกว่ากัน
Single Quoted
$time1 = getTime();
while($i<=3000){
echo ‘Test’;
$i++;
}
$time2 = getTime();
$resultTime=($time2)-($time1);
echo ($resultTime);
0.0010290145874023
Double Quoted
$time1 = getTime();
while($i<=3000){
echo "Test";
$i++;
}
$time2 = getTime();
$resultTime=($time2)-($time1);
echo ($resultTime);
0.0010409355163574
Single Quoted หรือ Double Quoted จากการทดสอบปรากฏว่า Single Quoted มีการทำงานได้ไวกว่าการใช้ Double Quoted สังเกตที่เวลาการทดสอบนะครับ ผมทดสอบที่การวน 3,000 รอบ เช่นเดียวกัน
ทั้งหมดเป็นการทดสอบที่ PHP ในเวอร์ชั่น 5.2 ครับ เป็นการรันแบบไม่ผ่าน Web Server คือรันกับตัวแปลภาษาของ PHP โดยตรง (php-cgi.exe) หากท่านต้องการนำโค้ดไปทดสอบ เวลาที่ได้อาจจะคาดเคลื่อนไปบ้าง ทั้งนี้ขึ้นอยู่กับ CPU RAM และอื่น ๆ ในสภาพแวดล้อมที่แตกต่างกัน อาจจะได้ผลการทดสอบที่แตกต่างไปจากนี้ก็ได้ครับ อย่ายึดถือผลการทดสอบจากบทความนี้เป็นบรรทัดฐานการพัฒนางานโปรแกรมของท่านนะครับ ลองพิสูจน์ด้วยตัวเอง แล้วจะได้คำตอบด้วยตัวท่านเอง ผมแค่นึกสนุกทดสอบเล่นเท่านั้น....^^!
อนึ่ง..ไวยากรณ์ต่าง ๆ ของ Programming Language เลือกใช้งานให้เหมาะสมกับปัญหาหรืองานที่พัฒนาอยู่ เขียนให้อ่านเข้าใจง่ายไม่ซับซ้อน จะเป็นผลดีในระยะยาวครับ
About the Author
Mr.Sittichai Raksasuk
Sittichai is a Web Developer and Web Technology Instructor for over 10 yrs.
He is also a webmaster of dwthai.com and author jQuery with Dreamweaver (2010). DwThai.Com is a website for web developer using Adobe Dreamweaver.
Contact with him : dwthai@gmail.com
บทความอื่นที่คุณอาจสนใจ
องค์ประกอบเว็บไซต์ในแบบ CDPเรื่อง :: องค์ประกอบเว็บไซต์ในแบบ CDP
CDP คืออะไร CDP เป็นอักษรย่อของคำว่า Content - Design - Program ครับ ผมพบคำนี้ใน We...