2011-10-25 42 views
10

includeファイルを使用するのは非常に一般的です。私はパフォーマンスを考慮せずにコードをきれいに保つために過度に使用されていると思う。 includeの場合、ディスクはファイルを読み取る必要があります。ディスクを非常に使用するため、処理が遅くなる可能性があります。しかし、これは主な遅いプロセスでもなく、レート制限プロセスでもありません。ファイルを読み込むときには、file_get_contentsの方が数倍高速です。読み込みインクルードファイルがPHPスクリプトの読み込みを遅くしますか?

これは、主要なウェブサイトがJavaScriptファイルをファイルで読み込むのではなく、HTMLファイル内に置く理由だと思います。あるいは、並列なhttpリクエストがJSコード全体をより速くロードできるため、大きなJSファイルをいくつかの小さなJSファイルに分割することをお勧めします。しかし、これはPHPスクリプトがincludeファイルを1つずつ処理中に読み込むため、phpファイルとは異なります。

  1. この問題が深刻な可能性がありますか? Webページが0.60sでロードされていると想像してください。includeの10個のphpファイルを0.70sにすることはできますか?

  2. この効果はごくわずかですが、このプロセスをスピードアップする方法があるかどうかを知りたいと思います。私はAPCのようなPHPのキャッシュを意味しません。

P.S.この質問は実際的な応用(典型的な場合)ではなく、一般的な理論的考察です。

+0

APCを有効にすると、 'include'の使用は非常に高速で、さらに高速になります。あなたはここの棒の間違った端を追いかけています。 – Petah

+0

また、通常、並列処理要求は接続処理のオーバーヘッドにより遅くなります。すべてのJSファイルを結合してドキュメントルートに配置し、Webサーバー(Apache)にキャッシングを処理させるだけです。 – Petah

+0

それは非常に深刻なことがあります...あなたが70年代のマシンを使用している場合:p「速く」実行するにはPHPコードが必要ですか? 0.1は重要ですか?高度に再利用可能で柔軟性があり拡張性の高いアーキテクチャと比較するとどれくらい悪いですか? – LeleDumbo

答えて

15

includeおよびそのilkが必要です。これは、クラス定義と関数定義で使用される点で、JavaとPythonのimportに似ています。 includeは非常に速くなければなりませんが、それを使用すると、スクリプトの実行が遅延した場合と比較して遅くなります。 includeは、file_get_contents()とはまったく異なります。後者は、構造体ではなく関数であり、文字列を返します。 includeは実際にインクルードされたファイルのコードを実行します。

JSファイルを分割することについての記述は、同じドメインブロックからのスクリプトのダウンロードが並行してダウンロードされるため、間違っています。通常、できるだけ一般的に含めることをお勧めします。

私は、すべてが必要であると仮定して、複数のページがあると仮定すると、ページのパフォーマンスが低下する可能性が高いです。パフォーマンスの問題がある場合は、他の場所を見てください。

PHPをスピードアップしたい場合は、PHPコンパイラを使用して調べてください。

+0

有益なお返事ありがとうございます。私はincludeとfile_get_contentsの違いを知っています。その比較によって、私はディスクからのファイルの読み込みが高速になることを意味しました。次に、律速段階はincludeのphp処理です。 – Googlebot

+1

PHPコンパイラを引用するための+1。私はいつもphpコンパイラについて疑問に思っていた(反対意見のため)。今私はそれを試しなければならない:) – Googlebot

4

PHPはメインのPHPファイルまたはインクルードに関係なく、コードを解析する必要があります。これをインクルードしても差はありません。ディスク速度は、最初の後にキャッシュされるため、違いはありません。

+0

非常に良い点。どのようにキャッシュされますか? APCによって? – Googlebot

+0

いいえ、ファイルはOSによってキャッシュされます(通常のディスクキャッシュだけで、PHPファイルは非常に簡単に収まる)。 APCは、ファイルの解析結果をキャッシュします。 – Ariel

6

はい、あります。使用していたライブラリは、下にたくさんのインクルードが含まれているため、パフォーマンスの低下を招きます。パフォーマンスを向上させる 最善のアプローチは、次のとおりです。

  1. すべて単一のもの
  2. 使用アクセラレータ

内のファイルが含まれて一緒に入れてそれを22倍して、ソリューションをスピードアップすることができます。Here

5

続きを読むこの考えてみましょう:

(index.php) 
for ($i=0; $i<100000; $i++) { 
    include('somefile.php'); 
} 

(somefile.php) 
<?php 
// nothing here 

index.phpをすることsomefile.phpはそれで何もしていないにもかかわらず、somefile.php含めながら10万反復を処理するために、(私にとって)〜115秒かかります。

は、しかし:

(index.php) 
for ($i=0; $i<100000; $i++) { 
    // no file included this time 
} 

は今は、()を構築することなく、完了するまでに0.002秒かかりindex.phpを。

(index.php) 
for ($i=0; $i<100000; $i++) { 
    echo $i .'<br/>'; 
} 

index.phpは$ iの100,000反復をエコーするのに0.02秒かかる。

もちろん、これは反復回数が多いため非常に極端な例ですが、include構造を単純に組み込むことで、スクリプトの実行時間がかなり急激に遅れることがあります。次回、反復回数の多いプロセスを書くときにこれを考慮してください。大規模なXMLファイルの読み取り/書き込みなどがあります。たとえそれが管理しにくい場合でも、コードをインラインに保つのが最善です。なぜなら、include()をインクルードするだけで、約100,000回の繰り返しで〜115秒(〜2分)をスクリプトの実行時間に追加するだけでなく、include()(somefile.php)実行する。私の例は単にinclude()を追加するだけです。インクルードされたファイルには何も含まれていません。

ここでは、ウェブページのファイルを含めて、時間はごくわずかです。私はinclude()コンストラクトがその内容に関係なく余分な処理を必要としていることを指摘していました。

関連する問題