好文: PHP performance tips - Google Webmaster

Google 提供的 PHP 效能調校(Optimize performance)的幾點原則, 詳細可見此文:

PHP 效能最佳化

此文內容很短, 講得都是大方向, 主題內容如下:

  • Profile your code to pinpoint bottlenecks
  • 升級 PHP 的版本
  • Use caching - 使用 Memcache, 若有使用 Template, 也要有支援 Template cache, ex: Smarty
  • Use output buffering
    • 我自己的心得: 提早讓使用者看到內容, 不過以目前流行的 MVC 架構來說, 這個得要在做些改變, 應該要改成 MVP 架構比較合適.
  • Avoid writing naive setters and getters
    • 物件若再包一層 setName()、getName(), 會比直接 $x->name 慢上一倍 - 可見此範例: #638732 - Pastie
  • Don't copy variables for no reason
    • if a user had inserted 512KB worth of characters into a textarea field. This implementation would result in nearly 1MB of memory being used.
    • 若沒有特別理由, 不要在多增加變數, ex:
      • $description = strip_tags($_POST['description']);
      • echo $description;
    • 請直接
      • echo strip_tags($_POST['description']);
  • Avoid doing SQL queries within a loop
    • 避免讓 SQL 放在迴圈中, ex:
      • foreach ($userList as $user) {
        $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
        mysql_query($query);
        }
    • 上述程式會執行的語法:
      • INSERT INTO users (first_name,last_name) VALUES("John", "Doe");
    • 建議改用:
      • $userData = array();
        foreach ($userList as $user) {
        $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
        }
        $query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);
        mysql_query($query);
    • 上述程式會執行的語法: (先把要寫入的先都組起來, 在一併丟入 MySQL 執行)
      • INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...
    • 詳細可見: MySQL INSERT Syntax

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料