ศุกร์, กรกฏาคม 30, 2010
   
Font Size

หน้าหลัก - BlackDemon Project!

เคล็ดลับเล็กๆน้อยๆ 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

ส่วนท่านใดมีเทคนิคอะไรก็มาแบ่งปันกันมั่งนะครับ :)


 

เสริมพลังให้กับตารางข้อมูลด้วยปลั๊กอิน 30 อย่างของ jQuery

วิธีการแสดงผลแบบง่ายๆเลยแต่เดิมก็คือใช้ HTML สร้างตาราง แต่การสร้างตารางที่แสนจะจืดชืดนั้นช่างขัดกับ Web 2.0 ซะเหลือ มันต้องมีลูกเล่นอะไรใหม่ๆมาเพิ่มให้มันน่าสนใจมั่งสิ

การแสดงตารางแบบปกติคือ static page และไม่สามารถกรองหรือปรับแต่งสิ่งต้องการได้ ดังนั้นจึงอยากจะขอแนะนำปลั๊กอิน jQuery 30 อย่างที่ช่วยให้คุณแสดงข้อมูลเป็น dynamic และปรับแต่งได้อย่างต้องการ มาดูกันเลยดีกว่า

1. DataTables

DataTables เป็นปลั๊กอินของ jQuery ที่มีความยืดหยุ่นสูง ที่จะช่วยให้เราควบคุม Table ที่สร้างจาก HTML ได้ดียิ่งขึ้น โดยความสามารถที่เด่นๆของมันคือ

  • ป้อนค่าจำนวนหน้าเพื่อปรับการแสดงผลของ แผงควบคุมหน้า (pagination) ได้
  • กรองข้อมูลได้
  • เรียงลำดับข้อมูลได้พร้อมกับหลายคอลัมภ์ พร้อมตรวจประเภทข้อมูลได้ (ตัวเลข,ตัวหนังสือ,เงิน)
  • ขยายความกว้างของคอลัมภ์เอง
  • แสดงข้อมูลได้จากแห่งข้อมูลได้หลายๆอย่าง
  • สนับสนุนหลายหลายภาษา
  • ปรับแต่งความสวยงามได้ด้วย jQuery UI ThemeRoller
  • อึด! แสดงผลข้อมูลมากกว่าพันรายการได้สบายๆ
  • รองรับปลั๊กอิน
  • ที่สำคัญ ฟรี!

DataTables

ดาวน์โหลด | ดูตัวอย่าง

2. jqGrid

สุดยอดปลั๊กอินที่ผมใช้บ่อยๆ ปลั๊กอินตัวนี้มีรุ่นฟรีสำหรับ PHP และสำหรับ ASP.NET โดยเฉพาะ(ไม่ฟรี) ความสามารถก็ล้นเหลือ สามารถปรับแต่งได้แทบจะทุกๆอย่าง เช่นปรับแต่งการกรองคำ,การเรียงลำดับข้อมูล,การค้นหาข้อมูลในตาราง,แยกประเภทของข้อมูลได้ (ตัวเลข,ตัวหนังสือ,เงิน,วันที่,), รองรับหลายภาษา,กำหนดให้ auto refresh, รองรับ Theme หลากหลาย,กำหนดสีในแต่ละแถวได้, แสดงผลได้ดีในทุกๆ browser, สามารถใส่ sub grid เข้าไปได้, ที่สำคัญรองรับการ drag&drop ด้วย!! เมพขิง! (เขียนอวยไปไหมเนี่ย -..-)  ว่าแล้วไปลองเล่นดูกันเอาเองนะ

 jQuery Grid

ดาวน์โหลด | ดูตัวอย่าง

3. Table Pagination

ปลั๊กอินตัวนี้ถูกออกแบบมาให้แสดงผลง่าๆย เราสามารถปรับแต่ง แผงควบคุมหน้า (pagination) ได้ด้วย element

Table Pagination

ดาวน์โหลด | ดูตัวอย่าง

4. PicNet Table Filter

ปลั๊กอินตัวนี้จะมีจุดเด่นตามชื่อของมันเลย คือสามารถกรองข้อมูลได้ในแต่ละคอลัมภ์

PicNet Table Filter

ดาวน์โหลด | ดูตัวอย่าง

   

แนะนำ Flash Chart 7 แบบ สุดเจ๋ง!!!

จุดด้อยข้อหนึ่งของ jQuery และ Javascript ก็คือยังไม่มีปลั๊กอินสำหรับแสดงแผนภูมิดีๆ. แต่ถ้าคุณต้องการใช้แผนภมูิที่มีความสามารถสูงๆและแสดงผลได้สวยงาม Flash ช่วยคุณได้(คาดว่าในอนาคต HTML5 คงแก้ไขจุดนี้ได้) ซึ่งก็มีบางเรื่องที่ Flash ทำได้ดีมากแต่ขณะเดียวกันก็ยังมีบางเรื่องที่ทำไม่ได้ดีเท่าที่ควร เรามาดูกันว่าแผนภูมิ Flash ที่น่าสนใจมีอะไรมั่ง

Fusion Charts

Fusion Charts
Fusion Charts

Fusion Charts เป็นแผนภูมิแฟลชที่มีความสามารล้นเหลือ การแสดงผลสวยงามมากและยังปรับแต่งได้ค่อนข้างเยอะ แต่น่าเสียดายที่ของๆดีย่อมไม่ฟรี เจ้าแฟลชตัวนี้มีค่าตัวตั้งแต่ 2,000 กว่าบาทไปจนถึง 70,000 บาท(ถ้าเอาไปใช้ไนงานองค์กรนะ) แต่อย่างไรก็ดีเจ้าตัวนี้ยังเปิดของฟรีให้ใช้โดยมีข้อจำกัดต่างๆอยู่บ้าง ถ้าอยากรู้ว่ามันทำอะไรได้บ้างตามเข้าไปดูได้ที่นี่

Open Flash Chart


Open Flash Chart

Open Flash Chart, ตอนนี้พัฒนาไปจนถึง รุ่นที่ 2 แล้ว, เราอาจจะพบเห็นแผนภูมิแฟลชตัวนี้ในหลายๆเว็บไซต์เพราะมันเป็นซอฟแวร์เสรีและฟรีนั่นเอง, โดยเจ้าโอเพ่นแฟลชชาร์ตนี้สามารถปรับแต่งได้แทบจะทุกอย่างเช่นเส้นแผนภูมิรูปแบบของแผนภูมิ นอกจากนี้ยังรองรับการพัฒนาแบบ server side เช่น Rubu, Java, PHP, .Net ช่วยให้เราพัฒนาระบบสวยงามและง่ายดายยิ่งขึ้น

   

การดูรายละเอียด Server ด้วย PHP

เคยไหมที่ต้องการรู้ข้อมูลของเซิร์ฟเวอร์ ว่าใช้ RAM อะไร? ใช้ CPU อะไร? ใช้ HardDisk อะไร? วันนี้เรามีโค้ดง่ายๆที่จะตรวจสอบให้รู้ว่าเซิร์ฟเรามีอะไรบ้าง โดยใช้โค้ดตามนี้

<pre>
<b>Uptime:</b>
<?php system("uptime"); ?>

<b>System Information:</b>
<?php system("uname -a"); ?>

<b>Memory Usage (MB):</b>
<?php system("free -m"); ?>

<b>Disk Usage:</b>
<?php system("df -h"); ?>

<b>CPU Information:</b>
<?php system("cat /proc/cpuinfo | grep \"model name\\|processor\""); ?>
</pre>

โดยเซิร์ฟของคุณต้องเป็น Linux และเปิดคำสั่ง system() เอาไว้ด้วย เมื่อเรียกโดย PHP เราจะได้ค่าออกมาดังนี้

Uptime:
22:55:29 up 90 days, 22:15, 0 users, load average: 1.87, 1.59, 1.36

System Information:
Linux athon.websitewelcome.com 2.6.33.1 #6 SMP PREEMPT Tue Mar 23
23:09:34 CDT 2010 i686 i686 i386 GNU/Linux

Memory Usage (MB):
total used free shared buffers
cached
Mem: 8037 7704 333 0 300
6030
-/+ buffers/cache: 1373 6664
Swap: 6142 0 6141

Disk Usage:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 4.9G 939M 3.7G 20% /
/dev/sda7 1.3T 273G 928G 23% /home
/dev/sda6 3.9G 143M 3.6G 4% /tmp
/dev/sda3 25G 7.0G 17G 31% /usr
/dev/sda2 49G 28G 19G 61% /var
tmpfs 4.0G 0 4.0G 0% /dev/shm
none 4.0G 6.6M 4.0G 1% /var/spool/exim

CPU Information:
processor : 0
model name : Intel(R) Xeon(R) CPU E5405 @ 2.00GHz
processor : 1
model name : Intel(R) Xeon(R) CPU E5405 @ 2.00GHz
processor : 2
model name : Intel(R) Xeon(R) CPU E5405 @ 2.00GHz
processor : 3
model name : Intel(R) Xeon(R) CPU E5405 @ 2.00GHz
processor : 4
model name : Intel(R) Xeon(R) CPU E5405 @ 2.00GHz
processor : 5
model name : Intel(R) Xeon(R) CPU E5405 @ 2.00GHz
processor : 6
model name : Intel(R) Xeon(R) CPU E5405 @ 2.00GHz
processor : 7
model name : Intel(R) Xeon(R) CPU E5405 @ 2.00GHz


ง่ายดีใช่ไหมละครับ เราสามารถนำวิธีนี้ไปประยุกต์ใช้ตรวจสอบเมื่อ Server มีการโหลดเยอะๆ หรือหน่วยความจำใกล้เต็มได้ด้วย

   

เมื่อผมยอมศิโราบต่อ Google

เมื่อก่อนผมหวงความเป็นส่วนตัวมากๆ ทั้งๆที่อาจจะไม่สำคัญอะไร แต่ไม่รู้ล่ะ ผมหวงของผมนี่(เกรียนดีมั้ยล่ะ)
การใช้งานในผลิตภัณฑ์ต่างๆของ Google ซึ่งก็รู้อยู่แล้วว่า การใช้งานต่างๆมีการตั้งค่าปริยาย(Default) ทำให้ Google มีสิทธิ์เก็บข้อมูลต่างๆ ไม่ว่าจะเป็น

- Google Search
- Google History
- Google Chrome
- Google map
- Google Tool bar
- GTalk
- Picasa

แต่ Google ก็ยัง Don't be Evil เปิดช่องให้มีการตั้งค่าเอง เช่นไม่ต้องส่งข้อมูลกลับไปยัง Google หรือไม่ต้องจัดเก็บข้อมูลได้.
แต่ถ้าทำอย่างนี้แล้ว การคั้งค่าผลิตภัณฑ์ต่างๆของ Google จะยุ่งยากขึ้น แต่การใช้งานก็ออกมา'โง่'ไม่ได้ดั่งใจ

แต่มาไม่นานนี้ผมก็มานั่งคิดได้ว่าเราจะไปทำให้มันยุ่งยากขึ้นทำไม? ในเมื่อการส่งข้อมูลของเราทำให้ Google ฉลาดขึ้น
เมื่อ Google ฉลาดขึ้น เราเองก็เป็นคนได้ผลประโยชน์จากการใช้ผลิตภัณ์ของ Google ที่ส่วนมากเปิดให้ใช้งานได้"ฟรีๆ" แบบนี้ก็น่าจะ Win-Win ทั้งสองฝ่ายสิ

ว่าแล้วผมก็เริ่มเปิดการส่งข้อมูลต่างๆให้ Google ทั้งหมด. ผลลัพธ์ที่เปลียนแปลงที่สัมผัสได้ตอนนี้ก็คือ Ads ที่แสดงโดย Google Adsens ฉลาดขึ้น
มันสามารถรู้ได้ว่าเราต้องการอะไรอยู่ และแสดงผลได้ค่อนข้างแม่นยำ

อ่าห์.... ต่อไปนี้ชีวิตของผมคงต้องฝากไว้กับ Google สักพักใหญ่ๆแล้วสิ.


   

หน้า 1 จาก 9

Move
-

Short Articles

Top Headline

เมื่อก่อนผมหวงความเป็นส่วนตัวมากๆ ทั้งๆที่อาจจะไม่สำคัญอะไร แต่ไม่รู้ล่ะ ผมหวงของผมนี่(เกรียนดีมั้ยล่ะ) การใช้งานในผลิตภัณฑ์ต่างๆของ Google ซึ่งก็รู้อยู่แล้วว่า การใช้งานต่างๆมีการตั้งค่าปริยาย(Default) ทำให้ Google มีสิทธิ์เก็บข้อมูลต่างๆ ไม่ว่าจะเป็น - Google...

Read More...

เมื่อวานนี้ (26/11/2009) ทาง Mininova ได้ออกประกาศจำกัดการเผยแพร่เนื้อหา(งดอัพโหลดและลบไฟล์ torrent ออก) อันเป็นผลสืบเนื่องมาจากกรณีคำสั่งของศาลแห่งอูเทรคต์ ประเทศเนเธอแลนด์ เนื่องจากว่าทาง Mininova ไม่สามารถมีระบบที่กรองข้อมูลที่ละเมิดลิขสิทธิ์ได้ 100% ก็เลยต้องจำกัดเนื้อหาและการใช้งานเอาไว้ก่อน...

Read More...

ช่วงนี้ไม่ค่อยมีตังค์ใช้เลย คิดไปมาคิดมา เปิดระบบรับงาน outsource ดีกว่า ถ้าใครผ่านมาเห็นอยากจ้างงานกระผมก็ยินดีรับใช้ครับ ราคาถูกแพงต่อรองกันได้ครับ ดูรายละเอียดเพิ่มเติมได้ที่นี่

Read More...

Polls

มาเจอเว็บนี้ได้ไง

Login Form

Who's Online

เรามี 44 บุคคลทั่วไป ออนไลน์

Advertisement