あるHTMLファイルに
<?php require('test.txt');?>
というソースを入れ、外部ファイルを読み込むのですが、require以外に、
require_once()
include()
include_once()
などがありますが、例えば1ページのHTML内に5カ所くらいこのPHPソースを配置するとした場合、
どの命令が一番サーバーに対して負荷が軽いでしょうか?
よろしくご解答、お願い致します。
include_once や require_once を何回も呼び出しても意味ないと思いますが……
include と require はエラー処理が違うので機能的に望ましい方を使うべき、なのですが、その違いはどうでもよいという場合、
<?php define ('TIMES', 1000) ; define ('FILENAME', 'test.txt') ; ob_start() ; $start = microtime(true) ; for ($i = 0; $i < TIMES; ++$i) require FILENAME ; $time1 = microtime(true) - $start ; $start = microtime(true) ; for ($i = 0; $i < TIMES; ++$i) include FILENAME ; $time2 = microtime(true) - $start ; ob_end_clean() ; echo "require : $time1<br />include : $time2" ; ?>
このようなコードで処理にかかる時間を計測してみましたが、ほとんど変わりはないようです。負荷的には違いはないのではないでしょうか。
require()とinclude()は同じ程度ではないでしょうか?
ただrequire_once()とinclude_once()は上記2つよりはるかに処理が重い(負荷がかかる)
ようです。
厳密に調べるにはforループなどでrequireのみ、includeのみ繰り返したら結果が判るかも知れませんが...
require()とinclude()は読込不可能だったときにエラーとして止めたいか、
それとも処理を続けさせたいかの違いで使って良いのでは?
http://jp.php.net/manual/ja/function.include.php
ちなみにrequire_onceなど使うと同じ外部ファイルは1回しか読み込んでくれないはずですよ。
ありがとうございます。
ソースを書き換えなくてすむようです。
それぞれの関数により挙動が異なるので、最適なものを使うべきかと思いますが、それを把握した上でどれでもよいのであれば、一番処理が早いのはinlude のようです。
http://www.komonet.ne.jp/~php/chap7.htm:title=require文とinclude文]
ありがとうございます。
あまり、かわらないという意見がありましたので、inludeも含め再検討をした上で、もう一度考えてみます。
もう少し検証してみましたが、読み込むのがプレーンテキストの場合はほとんど差はないようです。
PHPコードの場合は差がある……ようなのですが、コードの内容など、条件によってどちらが速いとは一概に言えないようで……
ただ、その条件がどの様なものか、試してみた範囲でははっきりとは分かりませんでした。
わざわざありがとうございました!
あまり差がないようでしたら、置き換えることはやめておこうと思います。
ありがとうございました!
>どの命令が一番サーバーに対して負荷が軽いでしょうか?
Linuxなどの場合、メモリーに余裕があれば一度読み込まれたファイルは残っていると何処かで読んだような。そのため残っていればメモリ転送だけなのでそこまで負荷を考慮する必要は無いように思います。
require_once は重い
という記述もありますが私は確認できませんでした。
またPHP : include_onceとrequire_onceの評価コードではvar_dumpがほとんどの時間を使っていると思いますのでその結果には疑問です。
4.include, requireで読み込むファイルはフルパスにしよう
はうなずけるケースです。相対パスで記述された場合、ファイルを探すのはコストの高い処理だと思います。がフルパスで書くのは現実的ではなくinclude_path()を適切に設定するのがいいのではないでしょうか。あるいはdefine()でフルパスのディレクトリーの部分を定義して連結して使用する。
私の場合は何度も実行するという必要性が無いのでinclude_onceかrequire_onceを使っています。
ありがとうございます。
今まで作ったサイトは全てrequireで、置き換えてアップするのも一苦労なので、とりあえず大きな差がないようなので、このまま行きたいと思います。
今後はrequire_onceで行きたいと思っています。
ありがとうございます。
参考にさせて頂きます。
requireが負荷が高いと誰からか聞いたので、、、。
すっきりしました。