9

PHPで書かれたスクリプトと、Javascriptで書かれた同じスクリプトがあります。
これは100万回繰り返され、そのたびに文字列を配列にストリップし、最初の配列項目を新しい変数に割り当てます。

PHPは次のとおりです。

class First
{
public function Iterate()
{
    $count = 1000000; 
    $test_string = '';
    $test_array = '';
    $first_word = '';
    for($i=1; $i <= $count; $i++){
        $test_string = 'This is a test string';
        //could use explode but no explode in js
        $test_array = split(" ", $test_string);
        $first_word = $test_array[0];
    }
}
}
$first = new First();
$first->Iterate();

そして、Javascriptは次のとおりです。

function First() {
this.Iterate = function() {
    count = 1000000;
    test_string = '';
    test_array = '';
    first_word = '';
    for(var i=1;i <= count; i++){
                    test_string = 'This is a test string';
                    test_array = test_string.split(" ");
                    first_word = test_array[0];
    }
}
}
first = new First();
first.Iterate();

PHPをPHP-CLI5.3.10で実行し、Javascriptをノードv0.6.12で実行します。

PHPの場合は「memory_get_usage()」を使用し、Javascriptの場合は「process.memoryUsage()」を使用します。スクリプトの最初、最後、マイナスの最後から始めて実行し、最後にバイト数をmbに変換します。

PHPは0.00065mbのメモリを使用しますが、Javascriptは0.25 mbを使用しますが、PHPは4秒、Javascriptは0.71秒かかります。結果を2台の異なるマシンで実行しました。

Javascriptのメモリ使用量がPHPよりもはるかに高い理由を誰かが知っていますか(Javascriptが非常に高速に実行されるという事実にもかかわらず)?

私が思いついた唯一の説明は、隠しクラスを使用するV8の性質により、速度は向上しますが、メモリ消費量が増加するというものでした。

4

1 に答える 1

1

それらは非常に異なる実行環境であるためです。

PHP の場合、ソースは一連のオペコード (p コードのようなもの) に変換されますが、v8 は JIT コンパイラを使用します。後者はメモリ使用量がより多くなる傾向がありますが、メモリ使用量の 2 つの最大の違いは、ガベージ コレクションのポリシーが異なるためだと思います。

$test_array = split(" ", $test_string);

test_array = test_string.split(" ");

各反復の最後に破棄されるスタック上にオブジェクトを作成します。

どちらも、実行時のメモリ使用量を制御するための多くのアクセスを提供しません。

于 2013-01-14T17:09:40.453 に答える