
對於運行 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)
- 讀取檔案(在 ext2+ 上,符號連結包含在 inode 中,因此只需一次尋找)
- 讀取其他文件
- 執行php
二)
- 讀取文件
- 執行php
- 讀取其他文件
- 執行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 的結果永遠不會被緩存,因此它們將出現在每個請求上。
您可以看到符號連結如何成為一個指數級的效能問題,這取決於您的環境和程式碼。