PHPでの質問です。


関数やクラスなどを別ファイルにまとめています。
使う際はinclude等で読み込んで関数やクラスを使っておりますが、読み込まれた先のファイルは全てが読み込まれるという認識でよいのでしょうか?

たとえば読み込み先のファイルには関数10個、クラス10個が入っていて、実際に使用するのは関数2個とクラスが2個とします。
このときに処理にかかった時間が10秒とします。
もし読み込み先のファイルに使用する関数2個とクラス2個しかはいっていない場合は、処理時間に変化があったりするのでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/11/20 10:44:56
  • 終了:2011/11/27 10:45:03

回答(2件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/11/20 11:14:11

ポイント50pt

(1)読み込まれた先のファイルは全てが読み込まれるという認識でよいのでしょうか?
はい
 
(2)処理時間に変化があったりするのでしょうか?
1.全て読み込まれてパースされますので、
 インクルードに要する時間は増えます
2.インクルードによって消費メモリなどが増えることによって、
 WEBサーバーのように並行して沢山起動するような場合には、
 関数の動作時間に影響を与える可能性も少なからずあります
3.1ファイルのインクルードと複数ファイルのインクルードでは、
 ファイルアクセスに要する時間が増えますが、
 ファイルキャッシュが効けば非常に小さくできますので、
 長大なクラスよりは、多少なりとも小分けしたほうが有効な場合もあります
  
phpでもパフォーマンスを気にすることは必要なことではありますが、
phpは簡単に使えるというのが売りのようなものですから、
あまり難しく考えるのではなく管理しやすさを優先して、
関連する関数はクラスにまとめるほうが良いでしょう
それと・・・2個と10個という個数ではなく、
1つの関数がどれだけ長大で複雑かという点で考えるようにしましょう
 
大量のアクセスが期待されるなど、パフォーマンスが優先するのであれば、
JAVAなどの採用を考えたほうが良いでしょう

id:quocard

ひじょうにわかりやすく回答いただきありがとうございます。

回答にございます読み込まれた先のファイルは全て読まれるということですが、これはinclude等で読み込んだ先にさらにincludeやrequireがあればさらにその先も読み込んでいき、読込先がなくなるまで全て読み込むということでよろしいのでしょうか?

もし全て読み込むということであれば条件分岐(trueで読み込み)で読み込みの可否を判断するような仕組みのほうが読み込まれる量が調整できて良いという感じでしょうか。

2011/11/20 23:48:57
id:windofjuly

>条件分岐(trueで読み込み)で読み込みの可否を判断するような仕組み
 
それも一つの方法ですね
 
requireは静的(一括)読み込みで、includeなら動的な読み込みになります
 
requireは、パースに失敗した時点でコードの実行が中止されることとなり、
デバッグは比較的やりやすいです
 
includeは、その時点では致命的なエラーとならないことも多く、
処理が進むうちにエラーが表面化して止まるなど、
デバッグを非常に難しくしてしまう場合がよくあり、
システムリリース後にバグとして発覚などもよく聞く話です・・・
 
読み込みの可否を判断するという方法については否定も肯定もしませんが、
読み込まれる量の調整のためにデバッグを難しくするのではなく、
クラスに含む機能を適切に分けることを考えるなどしたほうが良いですし、
まずは製作・管理が楽なシステムを目指すのが良いとも思います
どこを着地点にするかは・・・あなた次第です 

2011/11/21 01:17:25
id:mario-16 No.2

蝸牛角上争何事回答回数219ベストアンサー獲得回数212011/11/20 11:38:24

ポイント50pt

PHPのコードは実行される前にコードの解釈が行われますので実際にどの範囲を使っているかは速度に関係しません。

ただ遅いかどうかというのは動作環境に依存します。
コードキャッシュという機能があります。
コードの解釈を行った結果をメモリ上に蓄えておく機能で二回目以降の速度が格段に変わります。

PHP:eAccelerator で PHP 高速化 - Y-110’s Wiki

id:quocard

回答ありがとうございます。

まだまだ駆け出しで掘り下げた動作については疎いのでとても参考になります。
eAcceleratorについてはとても有用ですが、モジュールを追加できないサーバーでは使用が困難なことがありそうです。
とは言え中間キャッシュを利用してもらえるのはありがたいのでこちらも含めて参考にさせていただきます。

2011/11/20 23:53:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません