BioLawCom.De » Blog » PHP
PHP Profiling and Optimisation with Xdebug
ส่วนมากแล้วภาษาเขียนโปรแกรมหรือเครื่องมือที่เป็น OpenSource มักไม่มี Profiling Tools ดี ๆ ใช้ง่าย ๆ ให้ใช้งานอย่างเครื่องมือเชิงพาณิชย์ราคาแพง ๆ (เช่น ใน MATLAB มี Profiling Tools ที่สุดยอดมาก ) แต่ในภาษาเขียนโปรแกรม PHP มี Profiling Tools ที่เป็น OpenSource เจ๋ง ๆ และใช้งานง่าย อย่าง Xdebug ซึ่งนอกจากจะใช้เป็น Profiling Tools แล้ว ยังใช้เป็นเครื่องมือสำหรับ Debug ได้อีกด้วย แต่ในครั้งนี้ผมจะเน้นการนำ Xdebug มาใช้งานในลักษณะ Profiling Tools Xdebug เป็น Extension สำหรับ PHP ที่ต้องทำงานร่วมกับ Apache และ mod_php สำหรับคนที่ใช้ Windows สามารถ ดาวน์โหลด Xdebug และติดตั้งใช้งานร่วมกับ mod_php ได้ สำหรับคนที่ใช้งาน Ubuntu เพียงแค่พิมพ์คำสั่ง
sudo apt-get install php5-xdebug ก็สามารถใช้งาน Xdebug ร่วมกับ mod_php ได้ทันที ... |
15 Feb 09 | by bow_der_kleine | tags เขียนโปรแกรม PHP Optimisation Profiling Xdebug
อะไรที่ Python มี แต่ PHP ไม่มี และในทางกลับกัน
อันที่จริงบล็อกนี้ ก็ไม่ต่างกับเอกสาร Python vs PHP ใน Python Wiki เท่าไร และทั้งสองภาษาต่างก็มีความสามารถสำหรับเขียนโปรแกรมในรูปแบบต่าง ๆ ได้พอ ๆ กัน แต่ด้วยความสบายที่ต่างกัน หากคนที่เขียน PHP เป็นอยู่แล้ว และอยากลองเขียน Python (ในทางกลับกันคงหายาก) อาจนำไปใช้เป็น guideline ได้ครับ สิ่งที่ Python มี แต่ PHP ไม่มี 1 string is a list ทำให้เรานำความสามมารถต่าง ๆ ที่มีอยู่ใน list มาใช้กับ string ได้ทันที รู้สึกได้ถึงความ powerful โดยเฉพาะการเรียกใช้ method ต่าง ๆ ใน PHP ฟังก์ชันที่ใช้กับ string และ array จะแยกออกจากกันเด็ดขาด ทำให้หลาย ๆ ครั้งต้องจำและทำความเข้าใจฟังก์ชั่นสองตัว ที่ทำงานเหมือนกัน แต่ตัวหนึ่งใช้กับ string อีกตัวใช้กับ array 2 in-statement เป็นอะไรที่อำนวยความสะดวกได้มาก เราสามารถใช้ in ตรวจสอบได้ว่า ตัวแปรหนึ่งเป็นสมาชิกของอีกตัวแปรหนึ่งหรือไม่ เช่น "abc" in "abcdef" จะส่งค่ากลับมาเป็น True และ 1 in [2, 3, 4] จะส่งค่ากลับมาเป็น False เป็นต้น ใน PHP ต้องใช้ฟังก์ชั่น in_array , array_key_exists แล้วก็ strpos แทน (แยกฟังก์ชันตามประเภทตัวแปร) ซึ่ง in-statement ของ Python ง่ายกว่าเห็น ๆ แล้วมันเป็นอะไรที่ใช้บ่อยเสียด้วยสิ ... |
16 Jan 09 | by bow_der_kleine | tags เขียนโปรแกรม Python PHP
Using Mix-ins with PHP
ทางแก้ที่โปรแกรมเมอร์มืออาชีพเขาแนะนำกัน คือการใช้งาน Mix-ins แต่อย่าเพิ่งเข้าใจผิดนะครับ ว่า PHP สนับสนุน Mix-ins การใช้งาน Mix-ins ใน PHP ต้องมีการแฮกกันเล็กน้อยถึงจะสามารถใช้งานได้ ซึ่งต่างจาก Ruby หรือ Python การใช้งาน Mix-ins ที่ผมจะเขียนถึงนี้ ผมเอามาจากเวบของ Ivo Jansch อีกทีครับ Mix-ins เป็นวิธีการยืม method ของคลาสอื่นมาใช้ ซึ่งต่างจาก multi inheritance ตรงที่คลาสที่ยืม กับคลาสที่ถูกยืม ไม่ได้มีความสัมพันธ์กับแบบ subclass - superclass ต่างจาก interface ตรงที่ interface กำหนดเพียงแค่ชื่อ method เท่านั้น ส่วนเนื้อใน method ก็ต้องไปกำหนดเองอีกที และต่างจาก method decoration ตรงที่ method decoration ไม่ต้องมีการสร้างคลาส โดยส่วนตัว ผมชอบ method decoration มากที่สุด แต่ PHP มันทำไม่ได้ แกนหลักของ Mix-ins ที่ผมจะเขียนถึงคือ การใช้ method ที่มีชื่อว่า __call ซึ่งทุกคลาสใน PHP จะมี method ชื่อนี้อยู่ ... |
21 Dec 08 | by bow_der_kleine | tags เขียนโปรแกรม PHP
เก็บตก Webapplication technologies
เทคโนโลยีที่ผมทดสอบเพิ่มเติมได้แก่ WSGI, mod_wsgi สำหรับ python และ FCGI, mod_proxy_balancer สำหรับ ruby นอกจากนี้ผมยังได้ปรับปรุง และเพิ่มเติมการทดสอบอีกเล็กน้อย WSGI เป็นมาตรฐานใหม่ที่ถูกกำหนดลงไปใน PEP 333 เพื่อใช้ในการติดต่อเชื่อมโยงระหว่าง Webserver และ Webapp โดยเอาแนวคิดมาจาก Servlet ของ Java ซึ่งการเขียน Webapp โดย WSGI นั้นค่อนข้าง lowlevel พอสมควร ทำให้ไม่สะดวกสบายเหมือนใช้ mod_python การใช้งาน WSGI นั้นสามารถใช้งานได้สองรูปแบบคือเขียนโปรแกรมเป็น Stand-Alone Webserver แบบ Mongrel หรือเชื่อมต่อระหว่าง Webserver กับตัว Webapp คล้าย ๆ mod_python หากจะเขียนโปรแกรมแบบ Stand-Alone ผมเข้าใจว่า เวลาติดตั้ง python เสร็จแล้ว สามารถใช้งาน wsgiref ซึ่งเป็นโมดูลสำหรับเขียน Webserver แบบง่าย ๆ ได้เลย ไม่ต้องติดตั้งโมดูลเพิ่มเติม แต่เนื่องจากใน Debian และ Ubuntu แพกเกจ wsgiref มันแยกออกมาต่างหากเลยต้องติดตั้งเพิ่มเติม ด้วยคำสั่ง ... |
12 Jun 08 | by bow_der_kleine | tags เขียนโปรแกรม ไอที Webapplication Java JSP PHP Python Ruby
Webapplication technologies
ในอินเตอร์เนตก็มีคนรีวิวเทคโนโลยีต่าง ๆ เหล่านี้ให้อ่านอยู่บ่อย ๆ แต่บางครั้งอ่านไปก็ไม่มีข้อมูลที่ผมอยากรู้ อีกทั้งผมเห็นว่าหากทดสอบเทคโนโลยี่ต่าง ๆ ด้วยตัวเอง จะทำให้ผมได้ความรู้สึกในการใช้งานเทคโนโลยีนั้นมากกว่า ก็เลยคิดว่าน่าจะลองทดสอบเทคโนโลยีต่าง ๆ เหล่านี้ด้วยตัวเอง ไปเรื่อย ๆ เพื่อเก็บเป็นฐานข้อมูลส่วนตัว ในขั้นแรกผมจะทดสอบเทคโนโลยีพื้นฐานก่อน นั่นคือตัวภาษาเขียนโปรแกรม ซึ่งผมเลือกมา 4 ภาษาได้แก่ Java (Java EE), PHP, Python และ Ruby เหตุผลไม่มีอะไรมาก เพราะพอเขียนได้อยู่ 4 ภาษานี้ และเป็นภาษาที่ได้รับความนิยม การทดสอบที่ผมจะเริ่มคือโปรแกรม "Hello World !" เพื่อดูการความยากง่ายในการติดตั้งและเซทอัพระบบ และดูประสิทธิภาพพื้นฐานของ Web-server แต่ละตัว โดยใช้ Ubuntu-8.04 เป็นระบบปฏิบัติการและ reference ... |
01 Jun 08 | by bow_der_kleine | tags เขียนโปรแกรม ไอที Webapplication Java JSP PHP Python Ruby
เวลาผมเขียนโปรแกรมจะเป็นพวกชอบรีด คือ ต้องรีด Performance ของโปรแกรมออกมาให้ได้มากที่สุด แม้ว่าในบางครั้ง Performance Optimisation จะหมายถึงโค้ดที่ดูแลยากขึ้น แต่ในบางครั้งการแก้ไขโค้ดเพียงเล็กน้อยก็ อาจทำให้โปรแกรมทำงานเร็วขึ้นอย่างเห็นได้ชัด หากเลือกได้ ทุกคนคงเลือกอย่างหลัง เครื่องมือสำคัญสำหรับ Performance Optimisation คือ Profiling Tools โดย Profiling Tools จะเป็นตัวบอกเราว่า ส่วนต่าง ๆ ของโปรแกรมใช้เวลาในการประมวลผลเท่าไร หรือ Profiling Tools บางตัวอาจบอกเราได้ด้วย ว่าส่วนต่าง ๆ ของโปรแกรมใช้หน่วยความจำไปเท่าไร
ช่วงนี้ผมต้องเขียนโปรแกรมด้วยสองภาษาคือ Python กับ PHP เวลาสลับภาษาไปมาก็จะเกิดอาการงง ๆ เล็กน้อย ชอบเอา Features ของภาษานึงไปใช้กับอีกภาษา ชอบเขียน Syntax ผิด ฯลฯ พอมากเข้าก็รู้สึกได้ ว่าสองภาษานี้ต่างกันมาก การออกแบบที่มีที่มาและจุดประสงค์ที่ต่างกัน วิธีคิดเวลาเขียนโปรแกรมที่ต่างกัน เลยอยากลองสรุปดูว่า มันมีอะไรที่ผมได้ใช้ในภาษาหนึ่ง แต่กลับไม่มีในอีกภาษา
แม้ว่า PHP จะเป็นภาษาเขียนโปรแกรมที่ได้รับความนิยมอย่างมาก ตามความนิยมในตัว Web Application แต่ก็มีความสามารถหลาย ๆ อย่างที่ผมคิดว่า PHP ควรมี แต่กลับไม่มี หนึ่งในนั้นคือ multi inheritance ซึ่งดูเหมือนจะเป็นแฟชั่นแบบหนึ่ง ที่ภาษาเขียนโปรแกรมหลาย ๆ ภาษาไม่สนับสนุน multi inheritance แต่แนะนำให้ใช้ interface แทน ซึ่งจริง ๆ แล้วมันใช้แทนกันได้ไม่ทั้งหมด โดยเฉพาะอย่างยิ่ง ในกรณีที่เราต้องการใช้ algorithm บางอย่างในตัว method การใช้ interface ไม่สามารถช่วยให้เรา reuse การใช้งาน method หรือ algorithm เหล่านี้ได้
หลังจากที่เขียนบล็อกเรื่อง
ด้วยความที่ระยะหลังไม่ว่าโปรแกรมอะไรก็ถูกทำให้เป็น Webapplication ไปเสียหมด เทคโนโลยีที่เกี่ยวข้องกับ Webapplication จึงออกมามากมาย ถึงขั้นเกินความต้องการ เหมือนสำนวนเยอรมันที่ว่า "Qual der Wahl" ซึ่งแปลได้ว่า ความทรมานในการเลือก มีให้เลือกตั้งแต่ภาษาที่ใช้, API, Framework, Web-server และรายระเอียดปลีกย่อยต่าง ๆ อีกมากมาย