php

PHP: Performance tips

Tip จากพี่ใหญ่ใจดี Google ครับ
ต้นฉบับ: http://code.google.com/speed/articles/optimizing-php.html
ผู้เขียน: Eric Higgins, Google Webmaster

PHP Performance Tips

  • อย่า copy ตัวแปรอย่างไร้ประโยชน์
    ในบางครั้งมือใหม่ PHP จะพยายามทำให้ code ดูสะอาดอ่านง่ายขึ้นด้วยการ copy ค่ามาใส่ตัวแปรที่ชื่อสั้น ๆ ซึ่งทำให้เปลือง memory เพิ่มขึ้นอีกเท่าหนึ่ง และแน่นอนทำให้ช้าลงด้วย จากตัวอย่างด้านล่าง ถ้า user ส่ง description ขนาด 512kB เข้ามาทาง textarea จะทำให้กิน memory ถึง 1MB เลยทีเดียว
    BAD: $description = $_POST['description']; echo $description;
    

PHP: ข้อควรระวังในการใช้ MetabaseSetSelectedRowRange

ปัญหาและการวิเคราะห์
วันนี้เจอ bug แปลก ๆ นั่นคือการใช้งานคำสั่ง MetabaseSetSelectedRowRange
ที่อยู่ใน Metabase library เพื่อจำกัดจำนวนของข้อมูลที่ต้องการ
แต่ดูเหมือนว่าจะใช้ไม่ได้ เพราะ query นานมาก นานเหมือน query มาทั้งหมด
จน timeout

โดยใน code นั้นก็เรียก MetabaseSetSelectedRowRange ตามปรกติ คือ

MetabaseSetSelectedRowRange($database, 0, $n);

โดย $n รับค่ามาจาก $_REQUEST ธรรมดา ๆ นี่แหล่ะ

$n = $_REQUEST['n'];

และไอ้ที่ทำให้มีปัญหาก็คือไอ้ $_REQUEST ธรรมดานี่แหล่ะ - -"
(เพราะ PHP จะถือว่าค่าใน $_REQUEST เป็นข้อมูลชนิด string)

Brief History of PHP

ประวัติโดยย่อของ PHP

Resource:
http://php.net/history

PHP/FI
PHP เกิดมาจาก PHP/FI ซึ่งสร้างขึ้นโดย Rasmus Lerdorf ในปี 1995
โดยมีรากฐานมาจาก Perl ในระยะแรก Rasmus ใช้ PHP/FI ในเวบส่วนตัวของเขา

PHP/FI เป็นชื่อย่อมาจาก Personal Home Page / Form Interpreter ได้รับการ Opensource
โดย Rasmus เพื่อให้ developer จากทั่วโลกสามารถนำมันไปพัฒนาและใช้งานต่อได้

ในปี 1997 ได้มีการเขียน PHP/FI 2.0 และเริ่มได้รับความนิยมเพิ่มขึ้นเรื่อย ๆ
เดือนพฤศจิกายนของปีนั้น PHP/FI 2.0 ได้ถูก release ออกมาให้ได้ใช้งาน แต่ก็อยู่ในลักษณะของ beta ซะมาก

Common Practice: PHP Programming

  • เรียก exit() หรือ die() ทุกครั้งหลังจากสั่ง header('Location: ...'); เพื่อ redirect ทันที (แต่ถ้ายังต้องการการ execute คำสั่งต่อไปจนจบ ก็ไม่จำเป็นต้อง exit)
  • ในกรณีที่มีการ require file อื่นที่เป็น library รวม และใน script ของเรา ต้องการสร้าง function ขึ้นมาใหม่ ควรใช้ function_exists เพื่อตรวจสอบการซ้ำก่อน

PHP Coding Standard

Reference:
http://framework.zend.com/manual/en/coding-standard.html

อ้างอิงจาก Zend Framework Coding Standard

PHP File Formatting (รูปแบบทั่วไป)
- File ที่มีแต่ PHP code ให้เริ่มด้วย <?php และไม่ต้องปิดด้วย ?>
เพื่อป้องกัน space ที่เกินอยู่หลัง ?> ต่อท้าย output โดยไม่ตั้งใจ
- ย่อหน้า 4 space -- ห้ามใช้ Tab
- ไม่ควรให้บรรทัดยาวเกิน 80 ตัวอักษร แต่ในกรณีที่จำเป็น 120 ตัวอักษรก็ยังพอได้อยู่
- ให้ปิดบรรทัดด้วยตัวปิดบรรทัดแบบ UNIX (0x0A)

Naming Conventions (การตั้งชื่อ)
- Class ให้ขึ้นด้วยตัวอักษรใหญ่

ImageMagick for PHP development

Environment
- Fedora 9
- Use yum and pecl

Installation Steps
0. (Optional) Prerequisite packages

yum install php-pear
yum install php-devel

1. Install ImageMagick development package

yum install ImageMagick-devel

2. Install imagick extension

pecl install imagick

3. Add following line to /etc/php.ini

extension=imagick.so

4. (Optional) Reload web server by

/etc/rc.d/init.d/httpd reload

How to use phpDocumentor

Command-line
phpdoc -o HTML:frames:earthli -d lib,common,app -t docs

-o = Output template
-d = Input directories
-t = target directory

มือใหม่ (อีกแล้วเหรอ) หัดใช้ PHPDocumentor

เรื่องมีอยู่ว่า ตอนนี้ผมกำลังทำ Framework สำหรับ Web application development อยู่ครับ
และตระหนักว่างาน Document ไม่ใช่งานเล็ก ๆ เพราะต้องทำให้ Programmer ทั้งองค์กรทำความเข้าใจและทำงานด้วย Framework นี้ได้
(พูดเหมือนว่ามีคนเยอะมาก... แต่ก็เอาเถอะ เดี๋ยวก็เยอะเองแหล่ะ ทำไว้ก่อนน่าจะดี อิอิ)

จึงเป็นเหตุให้ต้องลองหาวิธีการทำ Source code document ที่มีประสิทธิภาพ ไม่ต้องการเขียนอะไรซ้ำซ้อน ฯลฯ สรุปว่าหาแบบดี ๆ หน่ะ
และผมเป็นพวกชอบเผื่อไว้ว่าอยากจะแก้ไขอะไรเอง จึงชอบหา project Opensource มาใช้งาน ซึ่งเมื่อลองหาดูก็พบที่ค่อนข้างถูกใจอยู่ 2 ตัวคือ

Syndicate content