PHPスクリプトの最速の設定

おそらく、多かれ少なかれ深刻なアプリケーションの開発に直面している人なら誰でも、スクリプトまたはアプリケーション設定を保存するための形式の選択はかなり責任がある問題であることを知っています。 構成は読みやすく、簡単に変更でき、簡単に移植できるようにする必要があります。リストはどんどん増えていきます。

サーバー側のPHPスクリプトが実行されるため、1秒間に何度も発生するため、configsのダウンロード速度はかなり重要なパラメーターです。 彼は時々、あまり注目されませんが。 PHPスクリプトの設定を保存するためのさまざまなオプションを、速度の観点から比較してみましょう。 さて、彼らの利便性について簡単に触れてください。

したがって、実験的:
誰かを怒らせないために、アルファベット順にリストします。 ちなみに、データベースに設定を保存するオプションは考慮されていませんでした。 設定へのアクセスの速度の面であまりにも不利に見えます。

条件:
2番目のテスト条件について議論できることは明らかです。 このオプションは、スクリプトの実行中にメモリに設定を保存するのに最適のように思えましたが、場合によってはそうではありません。 ちなみに、定義のあるPHPスクリプトはこの条件を満たしていません。そのため、「競合なし」とマークされています。

機器の構成は説明しません。 スクリプトの速度はサーバーに依存することは明らかですが、この場合、サーバーではなくスクリプトが比較されます。

確かに、サーバーソフトウェアについて少し説明する必要があります。 低負荷時には、実際のWebサーバーが使用されました。 したがって、サーバー構成は「戦闘」です。LinuxDebian Lenny、大量のメモリとハードドライブのRAID1アレイ。 eAcceleratorを使用したPHP 5.2.xシリーズ(ただし、最新ではありません)。 テスト中はZend Optimizerが無効になったため、テストはより「クリーン」になり、結果への影響は最小限になりました。 eAcceleratorを使用しないテストも実施されましたが、奇妙なことに、これは力の分散に大きな影響を与えませんでした。 私の意見では、その理由は、eAcceleratorがPHPオペコードのディスクキャッシングと、一定の時間を「消費する」ファイル変更時間の比較のために構成されているという事実にあります。

Iniファイル


: 0.015, 0.086, 0.784

:
x1 = 1
x2 = 2
x3 = 3

:
function config($file) {
    return parse_ini_file($file);
}

, . .

PHP-


: 0.029, 0.111, 0.902

:
<?
return array (
  'x1' => '1',
  'x2' => '2',
  'x3' => '3',
);
?>

:
function config($file) {
    return include($file);
}

. return, . , , , . .

, INI-, . , , PHP-, .

XML-


: 0.062, 0.385, 3.911

:
<root>
  <x1>1</x1>
  <x2>2</x2>
  <x3>3</x3>
</root>

:
function config($file) {
    $r = array();
    $dom = new DOMDocument;
    $dom->load($file);
    foreach ($dom->firstChild->childNodes as $node) {
        if ($node->nodeType == XML_ELEMENT_NODE) {
            $r[$node->nodeName] = $node->firstChild->nodeValue;
        }
    }
    return $r;
}

: , , . , PHP- , return XML- ( , , ). . .

: NEW! 0.047, 0.276, 2.791

: NEW!
function config($file) {
    $r = array();
    foreach(simplexml_load_file($file) as $k => $v) {
        $r[$key] = strval($v);
    }
    return $r;
}

SimpleXML , , . , .


: 0.034, 0.250, 2.369

:
x1  1
x2  2
x3  3

:
function config($file) {
    $r = array();
    if ($F = fopen($file, "r")) {
        while (($line = fgets($F)) !== false) {
            list($k, $v) = explode("\t", $line, 2);
            $r[trim($k)] = trim($v);
        }
        fclose($F);
    }
    return $r;
}

, , . , , parse_ini_file, , . , .

: NEW! 0.036, 0.250, 2.213

: NEW!
function config($file) {
    $r = array();
    foreach (explode("\n", file_get_contents($file)) as $line) {
        list($k, $v) = explode("\t", $line, 2);
        $r[trim($k)] = trim($v);
    }
    return $r;
}

. , , .


: 0.011, 0.041, 0.309

:
a:3:{s:2:"x1";s:1:"1";s:2:"x2";s:1:"2";s:2:"x3";s:1:"3";}

:
function config($file) {
    return unserialize(file_get_contents($file));
}

— .

PHP- define'


: 0.045, 0.252, 2.404

:
<?
define("x1", "1");
define("x2", "2");
define("x3", "3");
?>

, , , . , , define .

JSON- NEW!


: 0.015, 0.057, 0.495

:
{"x1":"1","x2":"2","x3":"3"}

:
function config($file) {
    return json_decode(file_get_contents($file), true);
}

JSON . PHP , INI-, PHP. : , stdClass object.


, — . , . , .

— , . JSON- INI-, , .

, — PHP. , .

XML — . , , .

, define' , .


, ? . , PHP-, . PHP :

: 0.018, 0.046, 0.317

, .

:
function config($file) {
    $file_dat = "$file.dat";
    if (!file_exists($file_dat) || filemtime($file_dat) <= filemtime($file)) {
        $r = include($file);
        if ($F = fopen($file_dat, "w")) {
            fwrite($F, serialize($r));
            fclose($F);
        }
    } else {
        $r = unserialize(file_get_contents($file_dat));
    }
    return $r;
}

, , , , .

P.S. PHP- . , : . , . , PHP 4 5 (, , XML). , .
P.P.S. JSON.
P.P.P.S. . , , - .

Source: https://habr.com/ru/post/J112402/


All Articles