วันนี้ไปเจอบทความหนึ่งซึ่งน่าสนใจ เขียนโดย Eric Higgins เว็บมาสเตอร์ของกูเกิล เขาแนะนำเทคนิคง่ายๆ สำหรับเพิ่มประสิทธิภาพของโค้ด PHP เรามาดูกันครับว่าเขาแนะนำอะไรไว้บ้าง
- อย่าไปก้อปปี้ตัวแปรแบบไม่มีเหตุผล การทำอย่างนี้จะทำให้โค้ดของเรากินหน่วยความจำเป็น 2 เท่า
แย่ :$description = $_POST['description']; echo $description;
เยี่ยม :
echo $_POST['description'];
- ใช้เครื่องหมาย ‘ สำหรับข้อความ สำหรับ PHP นั้น อนุญาตให้ใช้ได้ทั้งเครื่องหมาย ” และ ‘ 2 ตัวนี้มีความต่างกันอยู่ตรงที่ ทุกสิ่งที่อยู่ใน ‘…’ คือข้อความเท่านั้น ส่วน “…” สามารถแทรกตัวแปรเข้าไปได้ ตรงนี้แหละที่ทำให้ประสิทธิภาพลดลง เพราะทุกครั้งที่ใช้ “…” PHP จะต้องคอยหาดูว่าภายในมีตัวแปรอยู่หรือเปล่า ส่วน ‘…’ มันไม่สนใจ อะไรที่อยู่ข้างในถือว่าเป็นสตริงหมด
แย่ :$output = "This is a plain string";
เยี่ยม :
$output = 'This is a plain string';
แย่ :
$type = "mixed"; $output = "This is a $type string";
เยี่ยม :
$type = 'mixed'; $output = 'This is a ' . $type .' string';
- ใช้ echo แทน print เพราะมันอ่านง่ายกว่า
แย่ :print($myVariable);
เยี่ยม :
echo $myVariable;
- อย่าใช้การต่อข้อความ ตอน echo อันที่จริงแล้วคำสั่ง echo นั่นเราสามารถ echo ค่าแบบต่อเนื่องได้โดยการ ใช้คอมม่า (,) คั่นแต่ละค่า มันก็จะ echo ค่าออกมาตามลำดับ ถ้าเราใช้วิธีต่อข้อความก่อน echo มันก็ต้องเสียเวลาต่อข้อความก่อนอีก
แย่ :echo 'Hello, my name is' . $firstName . $lastName . ' and I live in ' . $city;
เยี่ยม :
echo 'Hello, my name is' , $firstName , $lastName , ' and I live in ' , $city;
- ใช้ switch/case แทน if/else เยี่ยมกว่า อ่านง่ายกว่า และแก้ไขในภายหลังง่ายกว่า
แย่ :if($_POST['action'] == 'add') { addUser(); } elseif ($_POST['action'] == 'delete') { deleteUser(); } elseif ($_POST['action'] == 'edit') { editUser(); } else { defaultAction(); }
เยี่ยม :
switch($_POST['action']) { case 'add': addUser(); break; case 'delete': deleteUser(); break; case 'edit': editUser(); break; default: defaultAction(); break; }
7 says:
26/06/2552 at 26/06/2552
ข้อ 2. เครื่องหมาย ” ” มันจะตีความ \n\r ด้วย อาจทำให้มึนงงได้ และมันจะตีความแบบนี้ทุกที่ แม้กระทั่งคำสั่ง include ทำไงก็หาไฟล์ไม่เจอแน่นอน ให้ใช้ \\ หรือ ‘ ‘ แทน
ข้อ 4. ไม่เคยรู้เลย ต่อไปคงต้องทำแบบนี้แล้ว
administrator says:
27/06/2552 at 27/06/2552
ได้ความรู้เพิ่มเติมจากคุณ 7 ขอบคุณมากครับสำหรับข้อมูลเพิ่มเติม ตอนนี้ผมก็พยายามยึดทั้ง 5 ข้อนี้เป็นกฎในการเขียนโค้ด PHP ของผม
เมื่อก่อนผมจะติดใช้ ” เพราะคุ้นชินมาจาก VB เริ่มเลิกๆมันแล้วล่ะ เพราะเห็นว่า 5 ข้อที่เขาเขียนมา มีเหตุมีผล น่าปฎิบัติตาม
tappanom says:
01/12/2552 at 01/12/2552
ผมว่าเรื่อง switch case กับ if else นะขึ้นอยู่กับการนำไปใช้งานมากกว่านะครับ ผมว่าบอกไม่ได้หรอกว่าตัวไหนดีกว่ากัน มาสรุปแบบนี้ผมว่าไม่ถูกต้องนะครับ
administrator says:
01/12/2552 at 01/12/2552
K.tappanom ถ้าดูจากตัวอย่างให้ดี จะเห็นว่าตัวอย่างที่ให้ มันไม่ควรใช้ ifelse เพราะมันจะทำให้ดูยากจริงๆ
และในตัวอย่างเป็นการเปรียบเทียบตัวแปรแค่ตัวแปรเดียว ซึ่งการใช้ switch จะทำให้มองง่ายกว่า
ต้องยอมรับว่าในการเปรียบเทียบบางกรณี มันจะเอา switch ไปแทน if ไม่ได้ ก็ต้องใช้ if
เวลาเราเขียนโปรแกรม เมื่อเราใช้ if หลายๆชั้น ให้กลับมาทบทวนอีกสักครั้งว่า กรณีของเราใช้ switch แทนได้มั้ย มันจะได้ดูง่ายขึ้น
ถ้าใช้แทนได้ ก็ควรใช้ switch แต่ถ้าไม่สามารถแทนได้ ก็จำเป็นจะต้องใช้ if
ครับ
TipSiam.com says:
01/12/2552 at 01/12/2552
ขอบคุณครับ พวกนี้เป็นคำแนะนำจากทีมงานกูเกิลด้วยใช่มั๊ย เยี่ยม ๆ
ball6847 says:
03/12/2552 at 03/12/2552
ข้อ 1 ถ้าเรา assign by reference (=&) ก็น่าจะหมดปัญหาเรื่อง memory แล้วครับ
ส่วนเรื่อง switch case ผมคิดคล้ายๆกับคุณ tappanom นะคับ ว่ามันขึ้นอยูกับสถานะการณ์ ถ้าแบบง่ายๆตรงๆ ไม่มีไรมากก็ switch case
แต่ผมชอบยึด style เดียว เลยใช้แต่ if else T T~
administrator says:
03/12/2552 at 03/12/2552
ร่ำลือกันว่าใน php 6.0 จะไม่ยอมให้ทำ assign by reference (=&) ผมเองก็ยังไม่มีเวลาหาข้อมูลมายืนยันให้ชัดๆสักทีว่า จริงหรือไม่จริง