เทคนิคการเขียน php ให้ได้ประสิทธิภาพมากที่สุด ทำงานเร็วที่สุด


วันนี้ผมจะมาแนะนำวิธีการ เทคนิคการเขียน php ให้ได้ประสิทธิภาพมากที่สุด ในความสามารถที่หลากหลายของการเขียนโปรแกรมภาษา php บางครั้งเราอาจใช้คำสั่งต่างๆ ผิดวัตถุประสงค์ของมัน หรือใช้คำสั่งที่ไม่ถูกต้องหรือสมควรในการใช้งาน ถึงแม้ผลลัพท์ ที่ออกมานั้นจะแสดงผลออกมาเหมือนกัน แต่แน่นอนว่า ระบบจะมีการทำงานที่แตกต่างกันและใช้ทรัพย์ยากรของเครื่องไม่เท่ากัน บางท่านอาจจะคิดว่า เทคนิคการเขียน code คำสั่งเหล่านี้อาจไม่สำคัญเพราะผู้ใช้ระบบไม่สามารถเห็นได้ หากคุณเป็นคนที่เคร่งครัดและต้องการประสิทธิภาพสูงสุดของระบบและ server ที่ให้บริการ เทคนิคการเขียน เหล่านี้จะช่วยให้ระบบของคุณใช้ทรัพยากรพื้นฐานของระบบน้อยลง นั่นหมายความว่า เว็บของคุณอาจจะโหลดเร็วขึ้นหรือรองรับคนเข้าชมได้มากขึ้น โดยที่ทรัพยากรของเครื่อง server เท่าเดิม และเพิ่มความมีระดับของการเป็นโปรแกรมเมอร์อีกด้วย ข้อความบางส่วนได้คัดลอกและแปลงจาก http://meewebfree.com/site/php-codeigniter/177-50-technic-speed-up-php-compile ผมได้คัดมาในส่วนที่คิดว่าทำได้ และใช้ประจำเท่านั้น บางส่วนที่ผมคิดว่าไม่จำเป็นได้ถูกตัดออกไป

1. echo ทำงานได้เร็วกว่า print

เพราะว่า echo เป็น function ที่เรียบง่ายกว่า แต่ว่ากลับกัน print ทำงานได้มากกว่า ก็เลยช้ากว่า

2. หากต้องการใส่ค่าตัวหนังสือในตัวแปร ควรจะใช้ ' แทน "

เพราะว่า หากเราใช้ " ระบบจะทำการค้นหา ตัวแปรที่อยู่ภายในก่อน ทำให้ทำงานได้ใช้กว่า เช่น

 $t = 'abc'; 
ทำงานได้เร็วกว่า
 $t = "abc"; 

3. ใช้คำสั่ง sprintf แทนการใส่ตัวแปรตรงๆ

คำสั่ง sprintf เป็นคำสั่งที่ใช้สำหรับ แทรกตัวแปรลงในข้อความ สามารถแทรกตัวแปรได้หลายตัวพร้อมๆ กัน อีกทั้งยังทำงานได้เร็วกว่า เช่น

$num = 5;
$sum = 100.01;
echo "คุณมีสินค้าในรถเข็น $num ชิ้น รวมเป็นเงิน $sum บาท";
ควรเปลี่ยนเป็น
$num = 5;
$sum = 100.01;
echo sprintf('คุณมีสินค้าในรถเข็น %d ชิ้น รวมเป็นเงิน %01.2f บาท',$num,$sum);
* ปรกติค่า $sum เราจะใช้ %f แต่ถ้าหากจะระบุทศนิยม 2 ตำแหน่งใช้ %01.2f

4. การใช้ echo หลายๆ ครั้งจะทำงานได้เร็วกว่า การนำ string มาต่อกันแล้วค่อย echo ครั้งเดียว

เพราะว่า หากเราใช้ $text .= 'abc'; จะทำงานเยอะกว่าการ echo ออกมาตรงๆ นั่นเอง

5. หลังคำสั่งหรือ function ควรจะใส่เครื่องหมายปีกกา { } ให้ครบ

เพราะว่า หากเราไม่ใส่ ระบบจะต้องทำการค้นหาเอง และถ้าหากในหน้ามี code เยอะมากๆ มีการทำงานที่ซับซ้อน เป็นเรื่องยากที่เราเองจะดูออกว่า คำสั่งหรือ function นั้นๆ จบการทำงานที่ตรงใหน เช่น

foreach($a as $b)
        echo $b;
เขียนแบบนี้ไม่ดีครับ ไม่แนะนำ

6. กระบวนการ loop ควรคำนวนค่าคงตัวเอาใว้ก่อน

เพราะว่า หากเราใช้ count($number) ในกระบวนการ loop ระบบจะต้องมาคำนวนหาค่าใหม่ทุกครั้ง เช่น

for($i=0;$i<=count($number);$i++){

}
ควรจะเปลี่ยนเป็น
$num = count($number);
for($i=0;$i<=$num;$i++){

}

7. ตัวแปรเมื่อใช้งานแล้ว ควรจะลบทิ้งไป ด้วย unset

การลบตัวแปรที่ไม่ใช้งานเหล่านี้ทิ้งไปจะช่วยให้ apache หรือ โปรแกรมเว็บเซอร์วิส อื่นๆ ได้แรมคืนมา ช่วยให้ระบบทำงานได้มากขึ้น

8. ใช้ require() แทนที่จะใช้ require_once()

เพราะว่า require_once ต้องเสียเวลามาตรวจสอบก่อนว่า ไฟล์นี้เคยดึงเข้ามาทำงานแล้วหรือยัง ปรกติ require() ก็เพียงพอต่อการใช้งานแล้ว หรือว่าคุณจำไม่ได้ว่าเคยเรียกใช้หรือยัง!! งั้นคุณต้องไปเช็ค structure ของคุณเองแล้วล่ะ

9. str_replace ทำงานได้เร็วกว่า preg_replace

เพราะว่า str_replace เป็นคำสั่งที่เบสิกกว่า preg_replace และการใช้ Array() แทนดีกว่าการเรียกใช้ str_replace หลายๆครั้ง เช่น

str_replace('<',['',str_replace('>',']',$text));
ควรเปลี่ยนเป็น
str_replace(array('<','>'),array('[',']'),$text);

10. การปิด error ด้วย @ ทำงานได้ช้ามากๆ

บางครั้งเมื่อเราใช้คำสั่งที่ซับซ้อน เราอาจไม่สาามารถหาสาเหตุได้ว่า error นั้นจะมีรูปแบบใดบ้าง ส่วนใหญ่ นิยมใช้ @ นำหน้าคำสั่งเพื่อไม่ให้แสดง error ออกมาไม่ให้ผู้ใช้เห็น ถึงแม้จะเป็นคำสั่งที่ไม่ควรใช้งาน แต่ก็มีข้อยกเว้นอยู่บ้าง สำหรับบางที่มันก็ไม่มีทางออกแล้วจริงๆ อันนี้อาจจะไม่ค่อยเกี่ยวข้องกับ เทคนิคการเขียน php เท่าใหร่ ส่วนคำสั่งที่ใช้ประจำและจำเป็นต้องใช้คือ @mysql_connect และ @socket_connect

11. ใช้ <?php ... ?> แทนการเรียกใช้แบบอื่นๆ

เพราะว่า php แต่ละเวอร์ชั่น มันจะผ่านเงื่อนใขการตรวจสอบแต่ละขั้นตอนก่อน แต่สุดท้าย มัน else ออกมาเป็น php แต่เราไม่จำเป็นต้องรอมันตรวจหลายขั้นตอน เราเขียนให้ถูกต้องและผ่านคำสั่งตั้งแต่ if แรกที่มันทำงานเลยจะดีกว่า และใน codeigniter เองควรจะใช้

12. เขียนโค้ดให้ถูกต้องตามไวยากรณ์ และเปิดใช้งาน error_reporting(E_ALL) เพื่อแสดงปัญหาที่เกิดขึ้น

หากระบบที่เราเขียนแสดง error หรือแจ้งเตื่อนปัญหาขึ้นมา เราควรที่จะแก้ใขปัญหานั้นให้ถูกต้อง ซึ่งแน่นอนว่า การปิด error_reporting(E_ALL) เป็นเรื่องแย่กว่า การใช้ @ หน้าคำสั่งที่เกิดปัญหาเสียอีก

13. ใช้ ip2long() กับ long2ip() แปลงค่า ip v4 ให้เป็นเลขชนิดตัวเลข

การแปลง ip2long จะช่วยลดขนาดของข้อมูลที่ต้องการเก็บลงได้มากทีเดียว

14. เมื่อใช้ header('Location:'.$web); จำไว้เสมอว่าต้องตามด้วยคำสั่ง die(); เสมอ

เพราะว่า หากเราไม่ใช้คำสั่ง die(); ต่อท้าย ระบบจะยังคงทำงานต่อไปเรื่อยๆ จนหมดสำสั่งที่จะให้ประมวลผล มันอาจจะแสดงค่า หรือ error ออกมาก่อนที่จะถูกย้ายไป

15. การเพิ่มค่าของ object property ($this->row++) ช้าเป็น 3 เท่าเมื่อเทียบกับ local variable

เพราะว่า ตัวแปรใน method สามารถถูกใช้งานได้หลายที่และสืบทอดได้ การเพิ่มค่าของมันจึงทำงานมากกว่า เช่น

class X {

       var $row;

        function a(){
               foreach($a as $b){
                        echo $b;
                       $this->row++;
               }
        }
}
ควรเปลี่ยนเป็น
class X {

       var $row;

        function a(){
               $i=0;
               foreach($a as $b){
                        echo $b;
                       ++$i;
               }
               $this->row = i;
        }
}

16. พยายามใช้ function ที่มีมากับ php ให้มากกว่า function ที่เขียนเอง

เพราะว่า คำสั่งที่มีใน php เป็นคำสั่งพื้นฐานพร้อมใช้งานในระบบ เราควรจะศึกษา function ที่มีใน php ให้ได้มากที่สุด เพื่อความรวดเร็วในการเขียนของคุณเอง แค่นี้ก็เป็น เทคนิคการเขียน php ที่ดีได้แล้ว

17. เว้นวรรคให้น้อย แต่พอเข้าใจ

การเขียนโปรแกรมรูปแบบการเขียนถูกออกแบบมาสำหรับให้คนอ่านและเข้าใจได้ง่าย แต่คอมพิวเตอร์นั้นต่างกัน คอมพิวเตอร์นั้นต้องแปลงภาษาที่เราเขียนเป็นคำสั่งที่มันเข้าใจอีกทีหนึ่ง ดังนั้นการเว้นวรรคข้อความเท่าที่จำเป็นให้เราพออ่านเข้าใจจะช่วยให้คอมพิวเตอร์ทำงานแปลงเป็นภาษาที่มันเข้าใจได้ง่ายขึ้น เช่น

if( $a == $b ){
       echo $a;
}
แน่นอนว่าจะทำงานได้ช้ากว่า
if($a==$b){
      echo $a;
}
เพราะตอมพิวเตอร์ต้องมาตัดช่องว่างออกก่อน แต่ที่ตอมพิวเตอร์ทำงานได้เร็วที่สุดคือ
if($a==$b){echo $a;}
คุณก็ต้องเป็นคนตัดสินใจเองว่า คุณต้องการรายละเอียดมากน้อยแค่ใหน ความเร็วที่ได้มันอาจจะน้อยมาก อย่าง 0.00012 กับ 0.00015 แต่ถ้าปรับแต่งแล้วมันยากที่จะอ่านเข้าใจ และแก้ใขยาก มันก็ไม่สมควรย่อมาก มันขึ้นอยู่กับความต้องการของคุณเอง


สุดท้าย ผมก็หวังว่าบทความนี้จะเป็นประโยชน์ต่อผู้อ่าน ผู้ที่กำลังศึกษาวิธี เขียนเว็บด้วยภาษา php ทำให้ได้ความรู้ เทคนิคการเขียน php เพิ่มเติม หากมีตรงใหนผิดพลาดหรือต้องการแนะนำเพิ่มเติมสามารถ คุยกันได้ที่ เว็บบอร์ดได้เลยครับ