2017-04-26 7 views
2

この2つのパフォーマンスの違いはありますか?アレイの初期化パフォーマンスの差

$rules['a']['x'] = 'someValue'; 
$rules['a']['y'] = 'anotherValue'; 

$rules['a'] = [ 
    'x' => 'someValue', 
    'y' => 'anotherValue', 
]; 
+1

[1st](https://3v4l.org/pI9Ap/perf#output)と[2nd](https://3v4l.org/EjVfZ/perf#output)では、違いが大きくなるのではないかと疑います。 – Script47

+3

自分でテストできます。 '$ startTime = microtime(true);のようなことをします。 for($ i = 0; $ i <100000; $ i ++){$ rules ['a'] ['x'] = 'someValue'; $ rules ['a'] ['y'] = 'anotherValue';} 'total time ='をエコーし​​ます。 microtime(true) - $ startTime;およびorherの場合も同じです。しかし、私はそれが大きな違いをもたらすのではないかと疑っています。 –

+0

@Tobias Fはいまあ私もこの1つを提案していた –

答えて

2

他のみんなで述べたように、任意の違いは無視できるだろうと、あなたはこれを気にしてはいけません。

しかし、第2の方法は、技術的にはより性能が高いはずです。なぜなら、少なくとも1つの命令で全体を処理するからです。

あなたがこれを行うとき:

$rules['a']['x'] = 'someValue'; 
$rules['a']['y'] = 'anotherValue'; 

を... PHPエンジンは、それが(その場合には、エラー)、配列、ArrayAccessオブジェクトやないのかどうか、最初$rulesが存在するかどうかを確認する必要があります。その後、$rules['a']でも同じことをしなければなりません。
そして、を2回とする必要があります。両方の行が別々の式を表すからです。

他方で:

$rules['a'] = [ 
    'x' => 'someValue', 
    'y' => 'anotherValue', 
]; 

...のみ$rulesは($rules['a']が存在するかどうか、それが何であるかの種類世話をしない)されている情報を確認し、それは一度だけそれを行う必要があります。これは非常に、非常に簡単に説明し、遊びに来て、違いを作る他の多くの要因があること


注意。しかし、それはPHPのような高水準言語を使用する利点です。一般的に、シーンの背後にあるものが気にする必要はありません。

パフォーマンスの最適化を行う場合は、これは間違いです。あなたの "ボトルネック"がどこにあるのかを見つけて、それらに取り組んでください(プロのヒント:10回中9回、データベースクエリです)。

関連する問題