Google 提供的 PHP 效能調校(Optimize performance)的幾點原則, 詳細可見此文:
- 原文: Let's make the web faster - PHP performance tips
- 作者: Eric Higgins, Google Webmaster
PHP 效能最佳化
此文內容很短, 講得都是大方向, 主題內容如下:
- Profile your code to pinpoint bottlenecks
- Profiling your PHP code - PHP Performance Profiling
- 升級 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);
}
- foreach ($userList as $user) {
- 上述程式會執行的語法:
- 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);
- $userData = array();
- 上述程式會執行的語法: (先把要寫入的先都組起來, 在一併丟入 MySQL 執行)
- INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...
- 詳細可見: MySQL INSERT Syntax
- 避免讓 SQL 放在迴圈中, ex:
相關網頁
- 有人持反對意見: Google 教你優化 PHP,PHP 開發團隊指內容不確