|
หัวข้อ: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: mean ที่ 16 ตุลาคม 2010, 20:29:45 สวัสดีครับ หลังจาก นั่งปวดหัวกับ THStats อยู่พักใหญ่
หาสาเหตุ ปัญหา การคำนวนผลสถิติ ว่าช้า ด้วยสาเหตุใด การเขียน ระบบคำนวนผลสถิติ ต้องคำนึงถึง ความรวดเร็วในการคำนวนผลเป็นอย่างมาก ขอไม่ร่ายยาวครับ ขอแชร์ สั้นๆ ดังนี้ Tips for php coding 1 if($a) ช้ากว่า if(isset($ia)) 2. preg_match ช้ากว่า strstr และ ช้ากว่า strpos 3. preg_split ช้ากว่้า explode 4. in_array *** และการเก็บข้อมูลใน array และการ search ใน array -------------------------------------------------------------------------------- $find = '8'; $arr = array(1,2,3,4,5,6,7,8); if(in_array($find,$arr)) echo 'found'; ช้ากว่า (3 เท่า) เมื่อเทียบกับ $arr = array_flip($arr); // กลับ key เป็น value หรือ กลับ value เป็น key if(isset($arr[$find])) echo 'found'; แต่ จะช้ามาก เมื่อ นำ array_flip มาอยู่ใน loop ด้วย ซึ่งจะใช้กรณี คำนวนหลายๆ ข้่อมูล for($i=0;$i<=100 ; $i++){ $arr = array_flip($arr); if(isset($arr[$find])) echo 'found'; } กล่าวคือการ เช็ค ข้อมูลใน key ของ array ทำงานได้รวดเร็วกว่า 100% -------------------------------------------------------------------------------- 5. scandir() / Functionใน php5 เร็วกว่า opendir readdir เกิบ 3-4 เท่า 6. require_once เร็วกว่า include 15-25% (เมื่อเกิด error จะหยุดทำงาน) 7. str_replace เร็ววกว่า preg_replace (เนื่องจากไม่ต้องสนใจ regular) แต่เขาว่า strtr ดีกว่า str_replace 8. การปิด error ด้วย @ หน้า function ทำให้ช้าลงถึง 200% เมื่อเกิด error/warning 9. การเก็บข้อมูล ip ลง database 123.123.123.123 มีขนาด 15 byte ถ้าเปลี่ยนด้วย ip2long ซึ่งจะได้ integer เหลือเพียง 4 byte 10. การบีบอัดข้อมูล string/text ด้วย gzcompress ประหยัดพื้นที่ลง กว่า 90% เท่าที่ทดสอบข้อมูลไม่เสียหาย การอ่าน gz / ungz ใช้เวลา ไม่กี่วินาทีเท่านั้น แต่คุ้มค่าในประหยัดพิ้นที่ 11. อย่าเขียน function ไว้ใน loop โดยเด็ดขาด 12. ควรเรียนรู้เขียน Class / OOP / Framework 13. ควรเครียค่า memory ในตัวแปล เมื่อเลิกใช้งาน หรือ โดยเฉพาะเมื่อมีการดึงข้อมูลขนาดใหญ่มาไว้่ในตัวแปล ด้วย unset() 14. $a=null ไม่เท่ากับ $a='' 15. เมื่อแน่ใจ ชนิดข้อมูล ควรเช็คด้วย === ซึ่งต่างกับตรง == คือ ทำการเช็ค type ตัวแปล ซึ่งทำให้ทำงานเร็วขึ้นมาก 16. $a=1 (is int) เร็วกว่า $a='1' (is str) เร็วกว่า $a="1" (is str but check variable) 17. if(strlen($a)<10) ช้ากว่า if(isset($a{10})) 18. $b = $a ? true : false ช้ากว่า if() else (ช้ากว่้ามากครับ) 19. การใช้ full path เร็วกว่า shot path เช่น /public_html/file.php กับ /var/home/user/domains/domains.com/public_html/file.php หาได้ด้วย echo dirname(__file__) 20. การเข้าถึงตัว แปล global ช้ากว่าตัวแปลปกติ 21. การเขียน comment ไม่ส่งผลทำให้ code รันได้ช้าลง 22. mysql_connect ควรปิด mysql_close และร่วมกับ mysql_free_result 23. ** การเก็บข้อมูลด้วย text file ทำงานได้เร็วกว่า mysql อย่างมาก หากมีการวางรูปแบบที่ดี เช่น เก็บแบบ text file / data is array / to string (serialize) / pack by gzcompress 24. ประกาศ error_reporting(E_ALL); ไว้จะเห็นจุดผิดพลาด ที่ปกติไม่เห็น เดี่ยวขอไว้แค่นี้ก่อนครับทำงานต่อก่อน จาก เล็กๆ น้อยๆ ข้างต้น เมื่อมีการนำมาใช้ ตรวจสอบ ในปริมาณ ข้อมูลจำนวนมากๆ จะส่งผลให้ การ รัน ช้าลงอย่้างเห็นได้ชัด ง่ายๆ เพื่อนๆ พี่ๆ น้องๆ หากท่านใด สนใจทดสอบ เพียง นำ code ดังกล่าว ไปรันใน loop สัก 1000-10000 จะเห็น time ได้ชัดขึ้นครับ วิธีการ (for PHP 5) if php 4 please read from : php manual โค๊ด: <? นี่เป็นส่วนเล็กๆ น้อยๆ ครับ จริงๆ ยังมีอีกมาก การปรับเพียงเล็กๆ น้อยๆ จะทำให้เว็บเราเร็วขึ้นมากๆ ทำให้ thstats.com สามารถ calculate stats 100,000 records เพียง 41 วินาที ซึ่งก่อนใช้ in_array 4000 records ใช้เวลาบางครั้งเกิบ 30-60 นาที เลยทีเดียว ^O^ ไม่น่าเชื่อใช่ไหมครับ แล้วการบีบอัด ด้วย gzcompress text file 560 MB เหลือเพียง 100 MB เศษๆ เท่านั้นเอง :'( ที่เล่ามาส่วนใหญ่ ได้ test time เองทั้งหมดแล้วครับ หวังว่าจะเป็นประโยชน์ ต่อไปนะครับ เขียน code นอกจากเขียนให้ได้ตามต้องการแล้ว เมื่อ advanced มากขึ้น ต้องคำนึงถึงความปลอดภัย ความรวดเร็วในการทำงาน ที่มีประสิทธิภาพ แต่ code น้อยลง และ ความสวยงามของ code # comment เผื่อมีผู้พัฒนาต่อ ซึ่งผมก็ไม่ค่อย comment ครับเสียเวลา แต่จริงๆ ไม่ควรเลย ผิดพลาดประการใด ขออภัยมา ณ ส่วนนี้ด้วยครับ หากนำไปเผยแพร่ ขอ credit ด้วยครับ ๑ mean ๑ ท่านใดสนใจ นำมาแชร์ กันได้ครับ หรือต่อได้ที่ http://rootzone.net/php-tips-how-to-optimize-php http://www.rightbrainnetworks.com/blog/10-things-you-probably-didnt-know-about-php/ http://juliusbeckmann.de/blog/ http://kevingessner.com/nihilartikel/fast-array-membership-in-php/ http://www.phpbench.com/ http://hungred.com/useful-information/php-micro-optimization-tips/ หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ แล เริ่มหัวข้อโดย: IzeSem ที่ 16 ตุลาคม 2010, 20:35:03 ขอบคุณครับเมมก่อนกระทู้้ดี
แล้ว ++$ กับ $i++ เขาว่าอันแีรกเร็วกว่าจริงเปล่า หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ แล เริ่มหัวข้อโดย: NEXT13 ที่ 16 ตุลาคม 2010, 20:40:17 เข้ามางงครับ ความสามารถทางสมองไม่ถึงจริงๆ :(
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ แล เริ่มหัวข้อโดย: mean ที่ 16 ตุลาคม 2010, 20:42:33 แล้ว ++$ กับ $i++ เขาว่าอันแีรกเร็วกว่าจริงเปล่า พอๆ กันครับ time ในการคำนวน ตัวเลข ที่เป็น interger ไม่สูงมากนั้น แต่จะต่างกันตรงที่ ถ้า ++$i คือ +1 ที่ i แล้วจึงเอาไปคำนวน หรือตรวจสอบ $i=1; if(++$i == 2) echo '2'; // output is 2 ตรวจสอบค่าใน $i ก่อน แล้ว จึง มา $i +1 ภายหลัง $i=1; if($i++ ==2 ) echo '2'; // .......... Blank หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: yyy ที่ 16 ตุลาคม 2010, 21:13:33 +1 :wanwan017:
bookmark ไว้ก่อน เอาไว้อ้างอิง หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: CHIN3JI ที่ 16 ตุลาคม 2010, 21:13:48 ความรู้แน่นมาคับ ขอบคุณสำหรับความรู้ใหม่ครับ :wanwan003:
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: pjgunner ที่ 19 ตุลาคม 2010, 18:15:19 ขอบคุณที่แชร์ครับ
เช่น การใช้ ternary operator ย่อมทำให้โค้ดอ่านง่ายกว่ามาก ในบางกรณี เพียงแต่ optimize มากไปกลายเป็น โค้ดอ่านยากมาก แนะนำให้ optimize เท่าที่จำเป็นและ performance critical จริงๆ ครับ และโค้ดที่ถูก optimize อย่างสุดๆ ควรเขียนคอมเมนต์ ให้มากครับ เพราะยิ่งทำให้เร็ว โค้ดอาจยิ่งเข้าใจยาก และใช้ตรรกะที่อ้อมโลกบ้าง จากประสบการณ์ที่ผ่านมาผม การเขียนโค้ดที่อ่านง่ายก็เขียนให้ทำงานเร็วมากได้ โดยเพียงแต่เลือกใช้ฟังชั่นที่เพียงพอต่อการทำงาน หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ แ เริ่มหัวข้อโดย: ayeweb ที่ 19 ตุลาคม 2010, 18:38:41 หามานานละ โฮสเริ่มไม่ไหว ไม่ได้optimize phpสักที
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: picharnan ที่ 19 ตุลาคม 2010, 18:57:03 ขอบคุณมากครับ เด๋ยวต้องเอาไปใช้บ้างหล่ะ
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: gootooyoo ที่ 19 ตุลาคม 2010, 19:11:09 6. require_once เร็วกว่า include 15-25% (เมื่อเกิด error จะหยุดทำงาน) <-- ชอบใช้include มันไม่หยุด
8. การปิด error ด้วย @ หน้า function ทำให้ช้าลงถึง 200% เมื่อเกิด error/warning <--อันนี้ก็ชอบใช้ กันไวก่อน 15. เมื่อแน่ใจ ชนิดข้อมูล ควรเช็คด้วย === ซึ่งต่างกับตรง == คือ ทำการเช็ค type ตัวแปล ซึ่งทำให้ทำงานเร็วขึ้นมาก 18. $b = $a ? true : false ช้ากว่า if() else (ช้ากว่้ามากครับ) <-- ชอบใช้สะด้วย เติมหน่อยครับ printf ไวกว่า echo แล้วใน เพิ่มข้อมูล อะไรควรสร้าง id 0 ทิ่งไว้ กัน error แจ๋วดี อิอิ หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: admev ที่ 19 ตุลาคม 2010, 19:29:55 ขอบคุณมากคับ ไม่เคยคิดถึงเรื่องนี้เลย วันหลังคงต้องไปนั่ง optimize บ้างแล้ว
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: O.o!! ที่ 19 ตุลาคม 2010, 19:50:48 โอ้ว ขอบคุณครับ ขอเก็บ :'(
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: aum_mix ที่ 19 ตุลาคม 2010, 19:55:41 โห้ขอบคุณมาก :wanwan017:
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: vpsman ที่ 19 ตุลาคม 2010, 20:49:44 สุดยอดมากๆครับ :wanwan017:
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: penthai06 ที่ 20 ตุลาคม 2010, 12:01:56 เว็บนี้ก็เยี่ยมครับ php.lt/benchmark/phpbench.php (http://www.php.lt/benchmark/phpbench.php)
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: TOOAds.com ที่ 20 ตุลาคม 2010, 12:09:16 ลืมเซฟ :wanwan017:
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: headmaster ที่ 20 ตุลาคม 2010, 12:17:42 +1
แจ่มมากมาย :'( ขอบคุณมากครับ หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: ขัน ที่ 20 ตุลาคม 2010, 12:24:46 +1 มีประโยชน์ จัดไป :wanwan016: หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: bouy22 ที่ 08 พฤศจิกายน 2010, 18:53:26 ตามมาอ่าน เทคนิค และ ทิป ดีๆ
ขอบคุณครับ +1 เลย หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: siemens ที่ 08 พฤศจิกายน 2010, 19:09:59 :wanwan017: ขอบคุณสำหรับความรู้ ดีๆ สำหรับมือใหม่ ๆ ที่ยังไม่รู้เรื่องอะไรคับ มาเก็บเกี่ยวประสบการณ์ครับ
หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: mean ที่ 08 พฤศจิกายน 2010, 19:15:36 เอานี่ครับ
$_event = microtime(true); .......PHP CODE....... printf("<br>Run time %f </b>",microtime(true) - $_event ); หัวข้อ: Re: อัดอั้นตันใจ ขอแชร์ ประสบการณ์ optimize php ครับ และวิธีการ Benchmark อย่างง่าย เริ่มหัวข้อโดย: bird35793 ที่ 09 พฤศจิกายน 2010, 09:34:44 โหสุดยอด อย่างนี้ต้องรีบเก็บแล้ว :wanwan011:
|