web-dev-qa-db-ja.com

htaccessの読み込み時間への影響

一般に、Apacheでの処理には2つの可能性があります。

  • htaccessファイルを使用してフォルダーの設定を1つずつ作成します

  • htaccessを完全に辞任し、すべてのルールをhttpd.confに配置する

Htaccessの使用は読み込み時間の問題です。 htaccessの使用は、読み込み時間の点でどれくらいの費用がかかりますか?テストはありますか?

15
Evgeniy

Apacheプロジェクトの recommendation は次のとおりです。

一般に、.htaccessファイルは、メインサーバーの設定ファイルにアクセスできない場合にのみ使用してください。 ... よくある誤解は、ユーザー認証とmod_rewriteディレクティブが.htaccessファイルに含まれる必要があることです。

したがって、両方を設定してください AllowOverride None とメインhttpd.conf内の他のすべてのディレクティブ(および/またはサブセクション Include


Apacheが notconfigured with AllowOverride None の場合、(マイナーな)パフォーマンスペナルティがすでに発生しています。 .htaccessファイルが使用されているかどうかに関係なく.

これは、すべてのリクエストに対してApacheは、リクエストされたリソースに至るすべての(サブ)ディレクトリに.htaccessファイルが存在するかどうかを確認する必要があるためです。たとえば、ディレクトリ/ www/htdocs/exampleからファイルが要求された場合、Apacheは次のファイルを探す必要があります。

/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess

したがって、そのディレクトリからのファイルアクセスごとに、それらのファイルが存在しない場合でも、4つの追加のファイルシステムアクセスがあります。 (AllowOverideが/に設定されている場合)

そのために使用されるシステムコール( man 2 stat )自体はそれほど高価ではなく、通常、実際のディスクをポーリングするのではなく、ファイルシステムキャッシュが使用され、実際のIO要件ですが、 この記事 が主張するように、それでも合計される可能性があります。


1つ以上の実際の.htaccessファイルが実際に存在する場合でも、Apacheはopen を読み取り、それを読み取る必要があります([別のトリガー] IO read operation and通常 IO write operation to update the filesystem atime 属性)および parse ロジックを適用する前にそれを適用します。

ディレクティブがメインのhttpd.confにある場合とは異なり、Apacheが一度だけ構文解析する必要があるのとは異なり、起動時に、各.htaccessファイルを要求ごとに再度解釈する必要があります。

IOオペレーションに加えて、.htaccessファイルの解析は、その複雑さに応じてどれほどコストがかかりますか。

それは決定するために注意深いベンチマークを取る必要があります。

22
HBruijn

費用は、サーバーが特に強力なストレージI/Oサブシステムであるかどうか、およびキャッシュが含まれているかどうかによって異なります。

それをテストする方法は、.htacessおよび load test を使用してシステムを構成することであり、他のWebサーバーと同じ方法で行います。次に、.htaccessなしでシステムを構成し、同じテストを実行します。

your構成済みシステムの結果を比較および対比します。

4
user9517

私はあなたの質問に対して単一の正しい答えがあるとは信じていません。 htaccessの読み込み時間に影響を与える可能性のある変数はたくさんあります:

  • サイトフォルダー構造:各フォルダーのすべての.htaccessは、ページが開かれるたびに読み込まれます。
  • Htaccessファイルの長さ:200行vs 3500行?大きな違いがあります。
  • .htaccess構成:書き換えとリダイレクトのルールは、他のルールよりも重い場合があります(唯一のルールではありません)。
  • クライアント側のネットワーク接続がロード時間に影響を与える可能性があります。 IMO、複数の場所から試してみて、平均的な時間を参考にすることができます。
  • ab-Apache HTTPサーバーベンチマークツール が役立ちます

より詳しい情報:

1
HEDMON

私は.htaccessを使用して、または使用せずにテストしましたが、速度やオーバーヘッドにまったく違いはありませんでした。確かに16のサイトしか実行しておらず、超高速サーバーなので、私の場合、ミリ秒単位の追跡はほとんど不可能です。何百ものサイトを実行しているサーバーでは、@ Iainがテストして確認したように、オーバーヘッドが顕著になる場合があります。

私は個人的に、仮想ホスト用の.confファイルを使用してすべてを実行します。htaccessではなく、すべてを完全に制御します。クリーンで、Apacheのメモリに1回ロードされます。私のwordpress書き換えルールも私の.confファイルにあるので、決して壊れることはありません。

1
MitchellK