เคล็ดลับเล็กๆน้อยๆ 10 อย่าง ในการเขียน PHP ให้ได้ประสิทธิภาพ
การเพิ่มประสิทธิภาพในการเขียนโค้ด PHP มีอยู่หลายอย่างวันนี้ขอแนะนำแค่ขั้นตอนง่ายๆที่หลายๆคนรู้อยู่แล้ว วันนี้ก็ขอกลับมาเขียนเอาไว้เพื่อคนที่ยังไม่รู้ได้เก็บไปใช้มั่งนะครับ
Loop
ใช้การนับจำนวนสูงสุดที่จะวนลูปก่อนที่จะเข้าลูปเช่น
#การเขียนที่ไม่ควรทำ
for($i =0; $i < count($array);$i++){
echo 'เข้าขั้นแย่แล้วนะ';
}
#การเขียนที่แนะนำ
$total = (int)count($array);
for($i =0; $i < $total;$i++){
echo 'ต้องอย่างนี้สิ!';
}
จากด้านบนจะเห็นได้ว่า ลูปแรกทำคำสั่ง count ทุกครั้งที่เรียกลูปใหม่ หาก array นั้นมีค่าเยอะๆก็ทำให้เสียเวลาไปโดยเปล่าประโยชน์
Single และ Double Quotes
จริงการใช้สองตัวนี้ก็ไม่ได้ให้ความแตกต่างกันมากนักระหว่าง Single(‘) และ Double(“) แต่ที่ผมแนะนำให้ใช้ single เพราะว่าคุณไม่ต้องกด Shift เมื่อพิมพ์ (ตลกล่ะ), เอาใหม่ๆเหตุผลที่ควรใช้ Single(‘) กับตัวแปรประเภท string ก็คือ PHP จะไม่อ่านค่าใน Single(‘) แต่ละแสดงออกมาเป็น string เลยลองนึกว่าเรามี string ที่ยาวๆแล้ว PHP ต้องสแกนค่าใน string นั้นทั้งๆที่ไม่จำเป็นสิ มันเสียเวลานะ แต่ถ้าใน string ยาวๆนั้นมีตัวแปร ($) อยู่ด้วยก็ใช้ Double(“) น่ะถูกแล้ว
Pre increment และ Post increment
เวลาเราต้องเพิ่มค่าในตัวแปรขึ้นเรื่อยๆก็สามารถทำได้หลายแบบเช่น
$i++;
++$i;
$i += 1;
$i = $i + 1;
รู้หรือป่าวว่าการเพิ่มค่าตัวแปรที่ถูกวิธีทำให้ประสิทธิของโปรแกรมสูงมากถึง 10% เลยทีเดียว ref แต่ความจริงผมก็ไม่ได้สนใจนักหรอกว่าแบบไหนจะมีประสิธิภาพมากกว่ากันเพราะความแตกต่างคงไม่สามารถแยกแยะออกได้ด้วยตาป่าว แต่ก็คงเหมาะกับคนที่ต้องการใช้งานระดับ micro ที่ต้องการประสิทธิภาพจริงๆ
Absolute Path และ Relative Path
Absolute Path หรือที่เรียกกันง่ายๆว่า full path นั้นเมื่อเทียบกับ Relative Path อันไหนจะให้ประสิทธิภาพมากกว่ากัน? น่าแปลกที่ผมคิดว่า Absolute Path ดีกว่า. เมื่อเทียบกับ Relative Path จะทำให้การกำหนด path ของ PHP ไม่สับสน. แน่นอนว่า Absolute Path คงไม่ดีแน่. แต่ในความเป็นจริงแล้วเราก็ทราบ path ที่อยู่ server ของเราอยู่แล้วนี่. ถ้ารู้อยู่แล้วงั้นคงไม่จำเป็นต้องพึ่ง Relative Path สู้โยน Path ตรงๆให้โปรแกรมเรียก ผมก็คิดว่าน่าจะเร็วกว่า
Echo Vs Print
แน่นอนใครก็รู้ว่า echo ดีกว่า แต่มันดีกว่าขนาดไหนกันนะ? เมื่อผมลองค้นหาในอินเตอร์เน็ตดูก็พบว่า การทดสอบนี้ ช่วยบ่งบอกว่าเมื่อทดสอบกับการประกาศโดยไม่มีค่าตัวแปร ($) จะเร็วกกว่ากันประมาณ 12-20%, และทดสอบเมื่อมีค่าตัวแปรจะเร็วประมาณ 40-80% เลยทีเดีว
Dot และ Commas
ระหว่าง dot และ comma เราจะใช้อันไหนเมื่อต้องการคั่นตัวแปร? ส่วนตัวผมจะใช้ dot เป็นประจำตามตัวอย่างนี้
$a = '10 PHP programming ';
$b = 'Improvement Tips';
#10 PHP Programming Improvement Tips
echo $a.$b;
และ
$a = '10 PHP programming ';
$b = 'Improvement Tips';
#10 PHP Programming Improvement Tips
echo $a,$b;
ผมไม่เคยรู้เลยว่าทั้งสองตัวนี้มีประสิทธิมากกว่ากันจนกระทั้งได้มาเจอบทความนี้ผลการทดสอบบอกว่า dot เมื่อไม่มีตัวแปรจะทำงานได้เร็วกว่าถึง 200% เลยทีเดียว. แต่ในบางกรณีมีคนใช้ comma ร่วมกับตัวแปรพบว่าจะเร็วถึง 20-35% เลยทีเดียว
str_replace และ preg_replace
ภาษา PHP มีฟังก์ชั่นสำหรับการค้นและแทนที่ถึง 3 ฟังก์ชั่น แล้วตัวไหนมันดีที่สุดล่ะ? บางคนอาจรู้มาว่า str_replace ทำงานเร็วที่สุดเหตุผลเพราะว่า str_replace ไม่ได้ทำงานซับซ้อนเหมือนฟังก์ชั่นอีกสองตัว แต่ในบางครั้ง str_replace ก็ไม่ได้เร็วกกว่าเสมอไปเช่นเมื่อลองเปรียบเทียบการใช้ str_replace จำนวน 5 ครั้ง กับ preg_replace จะพบได้ว่า preg_replace ทำงานเร็วกว่าถึง 86% เลยทีเดีย ref.
การหา Timestamp
เมื่อคุณต้องหาฟังก์ชั่น Timestamp มาใช้งาน สิ่งที่คุณจะทำก็คือเข้า Google แล้วไล่หาฟังก์ชั่นที่เดียวกับ Timestamp, แต่หลังจาก PHP5 เป็นต้นมาก็ไม่จำเป็นต้องทำอย่างนั้นอีกแล้ว เพียงแค่ใช้คำสั่ง
$_SERVER['REQUEST_TIME']
เราก็จะได้ timestame มาใช้แล้ว อย่างน้อยก็ช่วยประหยัดเวลาในการสร้างฟังก์ชั่นล่ะน่า
explode และ preg_split
เอาล่ะ เมื่อเราต้องการแยกตัวแปรใน PHP จะใช้ตัวไหนดี? แน่นอนว่าผมคิดถึง explode เป็นอันดับแรก เพราะว่าใช้มาตั้งแต่ PHP4 น่ะสิ. แต่เมื่อมี preg_split เข้ามาก็เริ่มคิดกันว่า preg_split น่าจะให้ผลดีกว่าเหมือนกับ preg_replace แต่ปล่าวเลย explode ยังให้ผลลัพธ์ที่ดีกว่าถึง 20% ref.
การปรับแต่งอื่นๆ
ยังมีวิธีอื่นๆอีกที่จะปรับแต่งโค้ดของเราให้มีประสิทธิภาพ เราสามารถหาบทความพวกนี้ได้จากหลายๆแหล่ง เช่น phpbench.com, net-beta และ php.lt
ส่วนท่านใดมีเทคนิคอะไรก็มาแบ่งปันกันมั่งนะครับ :)




