เทคนิคนี้ฝรั่งเขียนไว้ที่ http://www.wmtips.com/php/tips-optimizing-php-code.htm ผมเห็นว่ามีประโยชน์ต่อการจดจำไปปรับใช้ในโปรแกรมที่เราเขียนขึ้น ซึ่งผมจะหยิบเอามาเฉพาะข้อที่ง่ายต่อการทำ สำหรับท่านใดสนใจจะอ่านจากฉบับเต็มก็ตามลิ้งก์ด้านบนไปครับ หากท่านมีความเห็นขัดแย้ง ก็คอมเม้นท์ไว้ด้านล่างนะครับ มาถกกันจะได้เป็นประโยชน์ขึ้นไปอีก
1. ใช้ คำสั่ง echo แทนคำสั่ง print เพราะว่าคำสั่ง echo มันเร็วกว่า
คำสั่ง echo นั้นไม่ใช่ฟังก์ชั่นแท้ สังเกตได้จากตอนใช้งาน เราเขียนว่า echo ‘THANK’; จะเห็นว่าไม่จำเป็นต้องมีวงเล็บเข้ามาช่วย ส่วนคำสั่ง print นั้น เป็นฟังก์ชั่นแท้ๆ
2. หากต้องการ echo ค่าหลายๆค่าออกไปพร้อมกัน ใช้คอมม่าคั่นแต่ละค่าดีกว่าเอาแต่ละค่ามาต่อกันก่อนแล้ว echo
สามารถเขียนอย่างนี้ได้
$title = 'MR.'; $name = 'Platoo'; echo $title,$name; |
3. กำหนดค่าสูงสุดสำหรับ for-loops ไว้ก่อน อย่าไปคำนวณใน for
อันนี้ผมว่าบางครั้งเราก็เลี่ยงไม่ได้ ที่จะไปคำณวนค่าสูงสุดเอาใน for เอาเป็นว่าถ้าเลี่ยงได้ก็เลี่ยงครับ
$max = 6; for($inc=0;$inc<=$max;++$inc) { echo $inc; } |
4. ทำลายตัวแปรทิ้งบ้างหลังจากใช้งานเสร็จเรียบร้อยแล้ว โดยเฉพาะตัวแปรอะเรย์ที่มีขนาดใหญ่ เพื่อคืนค่าหน่วยความจำให้เครื่องเซิฟเวอร์
ในภาษา PHP นั้น คำสั่งที่ใช้สำหรับทำลายตัวแปรทิ้งคือ unset()
unset($title); unset($name[1]); |
ผมไม่แน่ใจว่าวิธีการในข้อนี้มีประโยชน์หรือเปล่านะครับ เพราะว่าภาษา PHP มันมี Garbage Collector เป็นตัวคอยจัดการหน่วยความจำอยู่แล้ว โดยปกติ PHP ไม่เคยเกิดปัญหาเรื่องหน่วยความจำรั่ว ก็ลองพิจารณาเอาครับ
5. ถ้ามี if/elseif ซ้อนกันหลายๆชั้น หันไปใช้ switch/case ดีกว่า
ข้อนี้ผมเห็นด้วยอย่างมาก แล้วเด็กใหม่ชอบใช้ if/elseif เสียด้วย เพราะไม่ค่อยถนัด switch/case บางคน ซ้อน if ซะ คนมาแก้โปรแกรมทีหลัง แทบต้องให้หมอหยอดน้ำเกลือ if/elseif นั้นมันจะไล่เปรียบเทียบมาตั้งแต่ if แรกลงไปเรื่อยๆ จนกว่าจะเจอเงื่อนไขที่เป็นจริง ถ้าเงื่อนไขนั้นอยู่ล่างสุดๆ มันก็ไล่กันนานหน่อย ส่วน switch/case นั้น มันจะกระโดดเข้าเงื่อนไขที่ถูกต้องของมันทันที ซึ่งเร็วกว่า ยกเว้นพวกลืมติดเบรก
6. @ มันช้ามาก
เครื่องหมาย @ เป็นสัญลักษณ์ที่ไว้สำหรับวางไว้หน้าฟังก์ชั่น เพื่อไม่ให้ฟังก์ชั่นนั้นๆ แสดงเออเร่อออกมาทางหน้าจอ หากมันเออเร่อ @ ตัวนี้บางครั้งมันก็มีประโยชน์ ฉะนั้นใช้เท่าทีจำเป็น
7. ปิดการเชื่อมต่อฐานข้อมูลซะหลังจากใช้งานเสร็จ
8. การเรียกใช้แบบนี้ $row[‘id’] เร็วกว่าแบบนี้ $row[id] 7 เท่า
PHP นั้นยอมให้เขียนสตริงโดยไม่ต้องใช้ฟันหนูคร่อม (คุณรู้หรือเปล่า) และการเรียกใช้ค่าจากฐานข้อมูล หรือตัวแปรอะเรย์ ก็เหมือนกัน PHP นี่ต้องยอมรับในความยืดหยุ่นของเขาจริงๆ
ทำไมแบบไม่คร่อมฟันหนูจึงช้ากว่าแบบคร่อมฟันหนู่ ก็เพราะว่า เมื่อ PHP เจอตัวสตริงนั้นเข้าไป มันจะต้องเอาตริงไปเช็กก่อนว่าเป็นตัวแปร constant หรือเปล่า ถ้าไม่ใช่มันก็จะมองว่าเป็น text ทันที ผิดกับที่คร่อมฟันหนูไว้แล้ว เครื่องหมายฟันหนูเป็นตัวบ่งบอกว่าข้างในนั้นเป็น text
9. for ($x=0; $x < count($array); $x++) วิธีนี้อย่าพึงปฎิบัติ ก็เนื่องจากว่ามันจะต้องคำณวนทุกรอบลูป มันมีวิธีที่เขียนง่ายกว่านี้และเร็วกว่าด้วย
$max = count($array); for ($x=0; $x < $max; $x++) |
10. ถ้ามันเป็น html อยู่แล้วก็ไม่จำเป็นจะต้อง echo ด้วย PHP
ในหนังสือ PHP นี่ตัวดีเลย สอนวิธีสร้างตารางด้วย PHP ข้างในโค้ด HTML ล้วนๆ เด็กก็ไม่เข้าใจเจตนาที่เขาสอน จำมาใช้กันเกลื่อน
หากเห็นว่ามีอย่างอื่นที่ควรจะจำไป optimize code ก็คอมเม้นท์แนะนำกันนะครับ
mandmod says:
07/05/2554 at 07/05/2554
พี่ครับ พอมีแนวทางการศึกษา zend framework บ่างหรือเปล่าครับ ผมอยากลองศึกษาดู เผื่อจะได้นำมาปรับใช้กับงานผมได้บ่าง
tooads.com says:
19/05/2554 at 19/05/2554
แจ่มครับ สคริปที่ใช้มีข้อ9.อยู่พอดี เดี๋ยวต้องไปแก้แล้วล่ะ
9. for ($x=0; $x < count($array); $x++) วิธีนี้อย่าพึงปฎิบัติ