.png)
Apache を実行している Linux サーバーにとって、これら 2 つのうちどちらが処理が簡単/高速でしょうか?
A) PHP ファイルを指すシンボリックリンク:
file-sym.php ---> file-orig.php
B) 次のように、別の PHPファイル ( file-inc.php
) を含む PHP ファイル ( file-orig.php
) があります。
ファイル-inc.phpの内容
<?php
include('file-orig.php');
?>
誰かがベンチマークを行ったことがあるかどうか興味があります。
答え1
私の直感では、シンボリックリンクの方が高速になると思います。なぜなら、そのチェーンの最初のリンクを処理するときに読み取るデータが少なくなるからです。ただし、大きな違いがあるかどうかはわかりません。違いを確認するには、2 つをベンチマークしてみてください。
A)
- ファイルの読み取り (ext2+ ではシンボリック リンクが inode に含まれるため、シークは 1 回のみ)
- 他のファイルを読む
- PHPを実行する
B)
- ファイルを読む
- PHPを実行する
- 他のファイルを読む
- PHPを実行する
include() バリアントは、システム上にシンボリックリンクを作成できない Windows ユーザーに適していると思います。
答え2
多くの管理者は、セキュリティとパフォーマンス上の理由から、Apache シンボリックリンクを無効にしています。
パフォーマンス上の理由から、Apache チューニングに関する次のページを参照してください。http://httpd.apache.org/docs/2.2/misc/perf-tuning.html
URL 空間のどこにでも Options FollowSymLinks がない場合、または Options SymLinksIfOwnerMatch がある場合、Apache はシンボリックリンクをチェックするために追加のシステム コールを発行する必要があります。ファイル名コンポーネントごとに 1 つの追加コールです。たとえば、次の場合:
<Directory />
DocumentRoot /www/htdocs
Options SymLinksIfOwnerMatch
</Directory>
URI /index.html に対するリクエストが作成されます。次に、Apache は /www、/www/htdocs、および /www/htdocs/index.html に対して lstat(2) を実行します。これらの lstat の結果はキャッシュされないため、すべてのリクエストで発生します。
環境とコードによっては、シンボリック リンクが指数関数的なパフォーマンスの問題になる可能性があることがわかります。