1. ホーム
  2. php

[解決済み] なぜrequire_onceは使い勝手が悪いのか?

2022-05-07 02:40:31

質問

よりよい PHP のコーディング方法について書かれた本を読むと、 そのすべてが require_once というのは、速度のためです。

これはなぜでしょうか?

と同じことをするのに適切な/より良い方法は何でしょうか? require_once ? 重要であれば、私はPHP 5を使用しています。

解決方法は?

require_onceinclude_once はどちらも、すでに含まれているもの/要求されているもののログをシステムが保持することを要求しています。すべての *_once の呼び出しは、そのログをチェックすることを意味します。だから、間違いなく いくつか しかし、アプリ全体の速度を低下させるほどのものなのでしょうか?

... 本当にそうでしょうか... あなたが 本当に 古いハードか、あるいは ロット .

もし、あなたが 何千もの *_once は、自分で作業を軽くすることができます。単純なアプリの場合は、一度だけ入れたことを確認するだけでいいのです べき しかし、それでも再定義エラーが発生する場合は、次のような方法があります。

if (!defined('MyIncludeName')) {
    require('MyIncludeName');
    define('MyIncludeName', 1);
}

個人的には *_once ステートメントを使用していますが、愚かな100万パスベンチマークでは、この2つの違いを見ることができます。

                php                  hhvm
if defined      0.18587779998779     0.046600103378296
require_once    1.2219581604004      3.2908599376678

で10-100倍遅くなる。 require_once というのが気になるし require_once の方が一見遅く感じます。 hhvm . 繰り返しになりますが、これは *_once を何千回と繰り返す。


<?php // test.php

$LIMIT = 1000000;

$start = microtime(true);

for ($i=0; $i<$LIMIT; $i++)
    if (!defined('include.php')) {
        require('include.php');
        define('include.php', 1);
    }

$mid = microtime(true);

for ($i=0; $i<$LIMIT; $i++)
    require_once('include.php');

$end = microtime(true);

printf("if defined\t%s\nrequire_once\t%s\n", $mid-$start, $end-$mid);


<?php // include.php

// do nothing.