ファイルを提供するため...
ウェブサーバーは最速です
デフォルトの書き換え規則は次のとおりです。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
つまり、リクエストがウェブサーバーが見ることができるファイルに対するものである場合は、php に話しかけずに、ファイルの内容 (または適切なヘッダー) で応答するだけです。この状況では、「cakephp は最初に /app/webroot/asset ... を調べますか?」というメッセージはありません。これは、リクエストの処理に CakePHP (または PHP) が関与していないためです。
つまり、簡単に言えば次のとおりです。
Request
-> webserver
-> check if file exists
-> response (file contents)
別の Web サーバー (Apache ではない) が使用されている場合、CakePHP は同等の書き換えルールを期待します。相当するものが存在するかどうかは決してチェックしませんapp/webroot/<the current url>-Webサーバーがそれ自体を行う必要があるためです。
PHPが遅い
要求が webroot に存在しないファイルに対するものである場合、処理が大幅に遅くなります。次のようなphpスクリプトでも:
<?php
// example app/webroot/index.php
$path = 'server/this/file.html';
echo file_get_contents($path);
exit;
次のように、ウェブサーバーによって直接処理される同等のリクエストよりも遅くなります。
Request
-> webserver
-> check if file exists
-> invoke php
-> get file contents
-> respond to webserver
-> response
さらに、phpはファイルを提供するために特別に設計されていないため(Webサーバーがそうであるか、そうあるべきであるように)、Webサーバー単独よりも本質的に遅くなります。
CakePHP は遅い
CakePHP プロジェクトで Web から直接アクセスできる唯一のパスは「app/webroot」です。
CakePHP によって処理されるリクエストの場合、Asset ディスパッチ フィルター(スリム化されたディスパッチ プロセス) を使用しても、明らかにより多くのロジックが関与するため、php でファイルをサーバーするために必要な最小限のロジックよりも遅くなります。簡単に言うと、リクエストは次のようになります。
Request
-> webserver
-> check if file exists
-> invoke php
-> Bootstrap CakePHP
-> Dispatch Request
-> Check Dispatch filters
-> check if request matches a configured plugin/theme file path
-> check if file exists
-> generate response
-> output response
-> respond to webserver
-> response
静的ファイルの要求を Web サーバーに処理させる場合と比べて、パフォーマンスの違いは非常に大きくなる可能性があります。
結論
必要のないときに php でファイルを提供することは、リソースの浪費です。可能な限り、リクエストの上位 (Web サーバー、プロキシ、またはできればユーザー自身のブラウザー キャッシュ) からの応答を許可する必要があります (~0 レイテンシー!)。