首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 效能優化 12 條實戰準則

     編輯:PHP 綜合知識

前言

PHP 應用的效能瓶頸往往不在語言本身,而在於寫法細節。以下整理 12 條經驗法則,涵蓋變量傳遞、流程控制、資料庫、輸出緩衝等面向,助你寫出更高效的代碼。

1. 函數返回值優於 global 變量

<?php
// 推薦:返回陣列
function parseUser($raw) {
    return explode('|', $raw);
}
$user = parseUser($userdb);

// 不推薦:污染全域命名空間
function parseUserGlobal($raw) {
    global $detail;
    $detail = explode('|', $raw);
}
parseUserGlobal($userdb);

返回值讓數據流向顯式,利於 OpCache 優化,也避免副作用。

2. 解析 REQUEST_URI 取得基礎 URL

<?php
$parts = explode('/', $_SERVER['REQUEST_URI']);
array_pop($parts);
$baseUrl = 'https://' . $_SERVER['HTTP_HOST'] . implode('/', $parts);

比依賴 HTTP_REFERER 更可靠(Referer 可被偽造或省略)。

3. 循環判斷優先使用 ===(恆等)

<?php
// 恆等比較:類型與值同時檢查,避免隱式轉換開銷
if ($a === $b) { $c = $a; }

注意:原文第 3 點筆誤,=== 才是高效寫法。

4. MySQL 查詢優先 WHERE IN,減少 LIMIT 深分頁

LIMIT 100000, 10 需掃描 10 萬行;若主鍵連續,改用 WHERE id IN (100001,100002,...) 可大幅提速。非連續 ID 首次稍慢,後續受益於查詢緩存。

5. 生產環境首選 Linux/Unix

NT 系統在高併發 I/O、進程管理上穩定性遜於 *nix。

6. 輸出前啟用 ob_start()

<?php
ob_start();           // 通用緩衝,加快輸出
// 或
ob_start('ob_gzhandler'); // *nix 下自動 Gzip,傳輸量減 70%+

7. 條件判斷技巧

  • 正向:if ($a == $expected) 讓引擎預測分支更準。
  • 否定:if (empty($a)) 比 if (!$a) 更明確且略快。

8. != 與 <> 效能等價

任選其一保持風格一致即可。

9. 單雙引號字符串效能差異可忽略

現代引擎對 $a = '...' 與 $a = "..." 優化一致,優先考慮可讀性與插值需求。

10. 規範 SQL 寫法助解析器

  • 回勾號包裹標識符:`table`.`col`
  • 顯式列出欄位而非 SELECT *
  • WHERE 條件順序配合索引

11. setcookie 即時生效需賦值給變量

<?php
if ($online) {
    $online1 = $online;          // 關鍵:先賦值
    setcookie('online1', $online, $time, $path, $domain, $secure);
}
// 否則需刷新頁面才能讀取 $_COOKIE['online1']

12. 文件讀取:fopen+flock 優於 file()

<?php
$fp = fopen($file, 'rb');
flock($fp, LOCK_SH);
$data = fread($fp, filesize($file));
fclose($fp);
// 兼具速度與併發安全

總結

微優化積少成多,但架構層面(緩存策略、異步隊列、索引設計)才是數量級提升的關鍵。建議配合 xhprof / Blackfire 定期剖析熱點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved