符號連結與 PHP 包含(效能)

符號連結與 PHP 包含(效能)

對於運行 Apache 的 Linux 伺服器來說,這兩個中哪一個更容易/更快地處理?

A) 指向 php 檔案的符號連結:

file-sym.php ---> file-orig.php

二) 一個 PHP 檔案 ( file-inc.php) 包含另一個 PHP 檔案 ( file-orig.php),如下所示:

文件-inc.php 的內容

<?php 
    include('file-orig.php'); 
?>

好奇是否有人做過任何基準測試!

答案1

我的直覺反應告訴我符號連結會更快,因為在處理該鏈中的第一個連結時您將不得不讀取更少的資料。我不確定兩者之間有多大區別,嘗試將兩者放在板凳上看看有什麼區別。

A)

  1. 讀取檔案(在 ext2+ 上,符號連結包含在 inode 中,因此只需一次尋找)
  2. 讀取其他文件
  3. 執行php

二)

  1. 讀取文件
  2. 執行php
  3. 讀取其他文件
  4. 執行php

我想 include() 變體對 Windows 使用者來說是有好處的,因為他們的系統上不能有符號連結。

答案2

許多管理員出於安全性和效能原因停用 apache 符號連結。

出於效能目的,請查看有關 apache 調優的頁面:http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

無論您的 URL 空間中沒有 Options FollowSymLinks,還是有 Options SymLinksIfOwnerMatch,Apache 都必須發出額外的系統呼叫來檢查符號連結。每個檔案名稱元件額外調用一次。例如,如果您有:

 <Directory />
 DocumentRoot /www/htdocs 
 Options SymLinksIfOwnerMatch
 </Directory>

並對 URI /index.html 發出請求。然後 Apache 將對 /www、/www/htdocs 和 /www/htdocs/index.html 執行 lstat(2)。這些 lstat 的結果永遠不會被緩存,因此它們將出現在每個請求上。

您可以看到符號連結如何成為一個指數級的效能問題,這取決於您的環境和程式碼。

相關內容