ปรับแต่งโค้ด PHP ให้เป็นมืออาชีพ

PHP

    php-coding-tips

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

<?php

#echo เร็วกว่า print ก็แน่นอนครับ เพราะว่า echo เป็น function ที่เรียบง่ายมากกว่า แต่ว่ากลับกัน print มันทำอะไรได้มากกว่า ก็เลยช้ากว่านั่นเอง
 echo ‘aaaa’;
#เวลาใส่ตัวหนังสือ หรือข้อความให้ใส่ใน ‘ ‘ จะเร็วกว่า ใส่ใน " " เพราะว่าเครื่องหมาย "…" มันจะทำการค้นหาตัวแปรที่อยู่ภายในก่อน

#ใช้คำสั่ง sprintf แทนที่จะยัดตัวแปรลงไปตรงๆ จะทำให้เร็วขึ้น 10เท่า!! ลองดูวิธีใช้ htttp://th.php.net/sprintf ไม่ยากครับ

#เรียกใช้ echo หลายครั้ง จะเร็วกว่าการเสียเวลาเพื่อเชื่อมตัวหนังสือก่อนเรียก echo ครั้งเดียว เช่นเชื่อมด้วย
 $tmp .= ‘xxx’;
// เป็นต้นครับช้า อย่าทำ

#ในกระบวนการ loop ควรคำนวนค่าต่างๆเอาไว้ก่อนเท่าที่ทำได้ เช่น
 for($x=0;$x &lt; count($array);$x)
#เราควรเปลี่ยนมาใช้
 $max = count($array);
#ก่อน ค่อยเอาค่า$max ไปใช้ เพราะว่ามันจะเสียเวลาคำนวนรอบเดียวเท่านั้น

#พยายามตรวจสอบตัวแปร array ถ้ามีค่าไหนไม่ได้ใช้ก็ unset ทิ้งไปบ้าง อันนี้หลายคน ตัวแปรเกลื่อนระบบ เปลืองแรมครับ ตรวจสอบได้จาก
print_r($array);

#พยายามอย่าเรียกใช้ function พิเศษ เช่น __get, __set, __autoload

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

#ใช้ Full path ในการ include หรือ require เพื่อลดเวลาการค้นหา path ของ OS ที่รัน full path ของไฟล์ที่กำลังทำงานเรียกได้จาก
dirname(__FILE__);

#require() และ include() มันทำงานได้เหมือนกันเลือกใช้ให้ตรงตามความต้องการ มันต่างตรงที่ว่า require() ถ้าไม่พบไฟล์ มันก็หยุดทำงานเลย ความเร็วที่ได้แทบไม่ต่าง

#ตั้งแต่ PHP5 เวลาจุดเริ่มต้นของการ ประมวลผล จะเรียกได้จาก
  $_SERVER[’REQUEST_TIME’]
// ไม่ต้องเรียกใช้
   time()
//หรือ
   microtime()
//ตอนนี้ น่าจะ php5 กันแทบทุกที่แล้วมั้งครับ ไม่มั่นใจลองใช้ phpinfo();

#PCRE regex ทำงานได้เร็วกว่า EREG แต่จะเห็นผลเมื่อใช้ในแบบ native function

#เมื่อจะประมวลผล XML ใน php ใช้ xml2array จะเป็นการเรียกใช้ PHP XML function และสำหรับ HTML สามารถเรียกใช้ PHP’s DOM document หรือ DOM XML ใน PHP4

#str_replace ทำงานได้เร็วกว่า preg_replace แต่บางครั้ง strtr ก็ทำงานได้เร็วกว่าถ้าต้องใช้กันตัวหนังสือเยอะๆ และเราจะใช้ array() ในการทำงานของ str_replace จะทำให้ทำงานได้เร็วกว่าการเรียก str_replace หลายรอบ

#statement else if ทำงานได้เร็วกว่า select statement หรือว่า case/switch เพราะว่า else if เป็นคำสั่งเงื่อนไขที่ simple ที่สุดแล้วครับ

#การปิด error ด้วย @ ทำให้ทำงานได้ช้ามาก เจอบ่อยมาก @mysql_connect แต่ว่า บางครั้ง ก็ปิดเพื่อความปลอดภัยครับ

#การจะลด bandwidth ให้เรียกใช้ mod_deflate ใน apache 2 และ mod_gzip ใน apache1 อันนี้ก็ต้องดูว่า server ที่ใช้งานรองรับหรือไม่

#ปิดการเชื่อมต่อกับ database เมื่อทำงานเสร็จทุกอย่าง เพื่อให้เหลือ connection ว่างสำหรับรองรับการทำงานต่อไป และเป็นการคืน ทรัพยากรกลับเข้ามาด้วย

#$row['id'] เร็วกว่า $row[id] 7เท่า เพราะว่าถ้าเราไม่ใส่เครื่องหมาย มันจะเสียเวลาทำความเข้าใจ index ว่าหมายความว่าอะไร ใน php5 มันจะ error แบบเห็นชัดเลย ถึงแม้ว่าเป็นตัวเลขก็ใส่ไว้ครับ เพื่อความเคยชิน

?>

#ใช้ <?php echo ‘aaaa’; ?> tag เมื่อเราจะใช้ PHP แทนการเรียกใช้แบบอื่นๆ รวมทั้งการใช้ short tag ด้วย < ? echo ‘aaaa’; ?> อย่างนี้พยายามเลี่ยงครับ

<?php

#เขียนโค้ดให้ถูกต้องตามไวยากรณ์ เพื่อลด error ที่จะเกิดขึ้น ซึ่งหลายครั้งมันเป็นเพียง notice หรือ warning เท่านั้น จะทำให้ลด over head ไปได้ หรือว่าลองเปิด
error_reporting(E_ALL)
//เพื่อให้เห็น error แบบเต็มๆ เปิดไว้เถอะครับ เขียนให้ถูกต้องเสมอ อย่าซ่อนขยะใต้พรม

#การแสดงผลแบบ PHP ทำให้หน้าเว็บช้ากว่า static page 2-10 เท่า (ใน apache httpd) ดังนั้น ใช้ php เท่าที่จำเป็น ถ้าหน้าไหนเป็น static ก็ใช้ .html ไปเลย

#PHP script จะต้องถูกประมวลผลทุกๆครั้งที่มีการเรียกใช้หน้าเว็บ ถ้าไม่มี cache ดังนั้นควรหาระบบ cache มาใช้(เช่น memcached, eAccelerator , Turck MMCache) เพื่อเพิ่มประสิทธิภาพการทำงานได้ 25-100% เพราะว่าจะลดเวลาการประมวลผลลงได้ นอกจากนี้ยังมีพวกที่ทำ file cache ด้วยนะครับ คือประมวลผลเสร็จ เก็บผลที่ได้เป็นไฟล์เลย

#ใช้เทคนิคการทำ cache แบบอื่นๆสำหรับหน้าเว็บที่ไม่ได้มีการเปลี่ยนแปลงมากนัก การทำ cache มันจะเหมือนการแสดงผล HTML ออกหน้าเว็บธรรมดา ลองใช้พวก Smarty หรือ Cache Lite ดู การทำ cache จะได้ผลดีสำหรับเว็บที่มี traffic มาก เปิดเว็บเยอะ หรือการเปิดแต่ละครั้งต้องใช้การประมวลผลอย่างหนัก

#พยายามใช้ isset แทนการใช้ strlen เช่น
     if (strlen($foo) &lt; 5) { echo “Foo is too short”;}
#ก็ควรเปลี่ยนมาเป็น
    if (!isset($foo{5})) { echo “Foo is too short”; }
#อย่างน้อยก็ลดการใช้ strlen ได้เลยล่ะ

#++$i เร็วกว่า $i++ หรือว่า การเพิ่มค่าก่อนนำไปใช้นั่นเอง

#พยายามใช้ function ต่างๆที่ php มีให้เรา อย่าเขียน function มาใช้งานเอง แต่ถ้าว่างมาก ก็ไปเขียน C extension หรือ module ให้รู้แล้วรู้รอดไปเลย อันนี้ออกแนวเหน็บๆ แต่ก็จริง เพราะว่าถ้าเป็น C extension หรือ php module มันก็ทำงานได้เร็วกว่า php function ที่เราเขียนมาแน่นอน

#พยายามตรวจสอบการทำงานของโค้ดของคุณ เพื่อจะได้รู้ว่า ทำงานหนักมากน้อยขนาดไหน หรือใช้พวก Xdebug debugger ช่วยตรวจสอบภาพรวมก็ได้ ถ้าเจอตัวแปรเหลือๆก็ unset ทิ้งตามระเบียบ

#เขียน document ให้โค้ดที่ตัวเองเขียนด้วย หลายครั้งกลับมาดูของตัวเอง แล้วมึนก็บ่อยไป โดยเฉพาะคนที่ไม่ได้ใช้ frame work ซึ่งมีอิสระในการเขียนโค้ด มักจะเจอประจำ

#หมั่นศึกษาการเขียนโค้ดในแบบที่ดี และแบบที่ผิดๆเอาไว้ ที่ต้องศึกษาแบบที่ผิด เราจะได้รู้ว่าแบบนี้ผิด และไม่ควรทำนั่นเอง

#พยายามเขียนโค้ดให้ตรงตามมาตรฐานให้มากที่สุด มันจะช่วยให้คนอื่นอ่านแล้วเข้าใจ รวมทั้งตัวเองด้วย เคยเจอเขียนแบบสับขาหลอกตัวเองมาแล้ว

#พยายามแยกส่วนโค้ดออกมา ให้ php แยกจาก HTML มากเท่าที่จะเป็นไปได้ เพราะว่าการเอาไปปนกันหมดนั้นมันจะทำให้งงมาก

#อย่าใช้ระบบ template ที่ซ้ำซ้อนเช่นพวก smarty โดยไม่จำเป็น php เองก็มี function ที่ทำงานคล้ายกัน ลองดู ob_get_content และ exact

#อย่าวางใจ ข้อมูลที่ได้มาจากการป้อนของ user เช่น form $_POST ให้ใช้ mysql_real_escape_string เมื่อใช้ mysql และ htmlspecialchars เมื่อแสดงผล HTML

#ด้วยเหตุผลด้านความปลอดภัย ไม่ควรแสดง path , extension และ configuration สู่สาธารณะ เช่นการ แสดง error หรือ phpinfo() ใน webroot

#ปิดการทำงานของ register_globals ไม่มีสคริปไหนในงานจริงที่เปิดใช้กันหรอก มีแต่สคริปแย่ๆและเก่าๆเท่านั้น อีกทั้ง register_globals ก็จะไม่มีอีกแล้วให้ php6 แต่ก็แปลก หนังสือสอน php ภาษาไทยส่วนใหญ่ชอบสอนให้ใช้ เซ็งจริงๆ

#ควรเก็บรหัสผ่าน มากกว่าเป็นตัวหนังสือดิบๆ อย่างน้อยควรเอารหัสผ่านไปเข้ารหัสเช่น MD5 หรือ sha1 ก็ได้นะ

#ใช้ ip2long() และ long2ip() เพื่อแปลงค่า ip v4 ให้เป็นเลขชนิด long แทนที่จะเก็บเป็น text ใน database ขนาด database ต่างกันชัดเจน

#ควรศึกษารายละเอียดที่เกี่ยวกับ PEAR ให้ดี เพราะว่าจะทำให้โค้ดมีมาตรฐานที่ดีมากขึ้น

#เมื่อใช้ header(‘Location:’.$url); จำไว้เสมอว่าต้องตามด้วยคำสั่ง die(); เพื่อป้องกันการหลุดของคำสั่ง เพราะหลายกรณีโดน hack แล้วก็โดนควบคุมให้ทำงานในแบบที่คิดไม่ถึงเลย (ถ้าไม่ die(); php จะทำงานเลยไปด้วยนะครับ)

#ใน OOP ถ้า method ใดเป็นชนิด static method ก็ให้ประกาศเป็นชนิด static ไปเลย จะทำให้เร็วขึ้นอีก 4 เท่า

#การเพิ่มค่าตัวแปรใน local OOP method นั้นเร็วที่สุด ใกล้เคียงกับการเรียก ตัวแปร local ของ function และการเพิ่มค่าตัวแปรแบบ globla ช้าเป็นเท่าตัวเมื่อเทียบกับ local

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

#การเพิ่มค่าให้กับตัวแปร local ที่ไม่ได้ประกาศไว้ก่อน ทำให้ช้ากว่าปกติ 9-10 เท่าเมื่อเทียบกับการประกาศไว้ก่อน

#การสร้างตัวแปร global แม้ว่าจะไม่ได้เอาไปใช้ใน function ก็ทำให้ช้าลง เพราะว่า php จะออกไปเช็คตัวแปร global ที่มีอยู่เสมอ

#จำนวน method ที่เพิ่มขึ้น ไม่ส่งผลต่อ performance (ถ้าใช้งานเท่าเดิม)

#method ใน derived classes ทำงานได้เร็วกว่า base class

#function ที่รับ 1 parameter แต่ใน function ว่างเปล่ามีลักษณะเหมือน การทำงาน $localvar++ 7-8 ครั้ง และถ้าเป็น method ลักษณะนี้ ก็เปรียบกับ $localvar++ 15 ครั้ง

#ไม่จำเป็นต้องทำทุกอย่างเป็น OOP มันจะทำให้เกิด overhead และ method, object จะทำให้เปลือง memory

#อย่าวางใจ ข้อมูลที่ได้มาจากการป้อนของ user เช่น form $_POST ให้ใช้ mysql_real_escape_string แทนการใช้ mysql_escape_string หรือ addslashs แต่ถ้า เปิด magic_quotes_gpc ไว้ ก็ให้ใช้ stripslashes ไว้ก่อน

#ระวังโดน header injection กับ function mail() form mail ที่หลายคน copy ตามเว็บมาใช้ มักจะโดนเอาไว้ใช้เป็นช่องทางส่ง email spam โดยที่เจ้าของเว็บไม่รู้ตัวเสมอๆ

#unset ตัวแปรของ database (อย่างน้อยที่สุดก็ password) ไม่จำเป็นตั้งใช้ หลังจากการเชื่อมต่อ เรียบร้อยแล้ว

/*
RTFM! ซะ แปลว่า Read The *-* ing Manual หรือ อ่านไอ้คู่มือหน่อยเถอะ อ่านได้ที่ <a href="http://th.php.net">http://th.php.net มีคำบรรยาย พร้อมตัวอย่างมากมาย ภาษาก็ไม่ยากเกินไปหรอกนะ
*/

?>


Blog WebMastered by All in One Webmaster.
1010001:72:101100