php方法传值和传引用性能比较

时间:2022-06-01 20:01:12

测试代码test.php:

<?php

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

function a($arr) {
     $data = [];
      foreach($arr as $var) {
            $data[] = $var;
          }

       return $data;
}

function b(&$arr) {
     $data = [];
      foreach($arr as $var) {
            $data[] = $var;
          }

       return $data;
}

$arr = [
 [
  'aaa' => [
   'aaa'=>'bbb',
   'bbb'=>'bbb',
   'ccc'=>'bbb',
   'ddd'=>'bbb',
   'eee'=>'bbb',
   'fff'=>'bbb',
   'add'=>'bbb',
   'dse'=>'bbb',
   'dad'=>'bbb',
   'dsa'=>'bbb',
   'das'=>'bbb',
   'ewq'=>'bbb',
   'qer'=>'bbb',
   'qad'=>'bbb',
   'asz'=>'bbb',
   'gda'=>'bbb',
   'abc'=>'bbb',
   'vbv'=>'bbb',
   'ewq'=>'bbb',
   'tew'=>'bbb',
  ],
  'bbb' => [
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>'bbb',
   'qaa'=>[
                'aaa'=>'bbb',
                'bbb'=>'bbb',
                'ccc'=>'bbb',
                'ddd'=>'bbb',
                'eee'=>'bbb',
                'fff'=>'bbb',
                'add'=>'bbb',
                'dse'=>'bbb',
                'dad'=>'bbb',
                'dsa'=>'bbb',
                'das'=>'bbb',
                'ewq'=>'bbb',
                'qer'=>'bbb',
                'qad'=>'bbb',
                'asz'=>'bbb',
                'gda'=>'bbb',
                'abc'=>'bbb',
                'vbv'=>'bbb',
                'ewq'=>'bbb',
                'tew'=>[
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>'bbb',
                    'caa'=>[
                        'aaa'=>'bbb',
                        'bbb'=>'bbb',
                        'ccc'=>'bbb',
                        'ddd'=>'bbb',
                        'eee'=>'bbb',
                        'fff'=>'bbb',
                        'add'=>'bbb',
                        'dse'=>'bbb',
                        'dad'=>'bbb',
                        'dsa'=>'bbb',
                        'das'=>'bbb',
                        'ewq'=>'bbb',
                        'qer'=>'bbb',
                        'qad'=>'bbb',
                        'asz'=>'bbb',
                        'gda'=>'bbb',
                        'abc'=>'bbb',
                        'vbv'=>'bbb',
                        'ewq'=>'bbb',
                        'tew'=>[
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>'bbb',
                            'qaa'=>[
                                'aaa'=>'bbb',
                                'bbb'=>'bbb',
                                'ccc'=>'bbb',
                                'ddd'=>'bbb',
                                'eee'=>'bbb',
                                'fff'=>'bbb',
                                'add'=>'bbb',
                                'dse'=>'bbb',
                                'dad'=>'bbb',
                                'dsa'=>'bbb',
                                'das'=>'bbb',
                                'ewq'=>'bbb',
                                'qer'=>'bbb',
                                'qad'=>'bbb',
                                'asz'=>'bbb',
                                'gda'=>'bbb',
                                'abc'=>'bbb',
                                'vbv'=>'bbb',
                                'ewq'=>'bbb',
                                'tew'=>'bbb',
                            ],
                        ],
                    ],
                ],
            ],
  ],
        'ccc' => [
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>'bbb',
            'caa'=>[
                'aaa'=>'bbb',
                'bbb'=>'bbb',
                'ccc'=>'bbb',
                'ddd'=>'bbb',
                'eee'=>'bbb',
                'fff'=>'bbb',
                'add'=>'bbb',
                'dse'=>'bbb',
                'dad'=>'bbb',
                'dsa'=>'bbb',
                'das'=>'bbb',
                'ewq'=>'bbb',
                'qer'=>'bbb',
                'qad'=>'bbb',
                'asz'=>'bbb',
                'gda'=>'bbb',
                'abc'=>'bbb',
                'vbv'=>'bbb',
                'ewq'=>'bbb',
                'tew'=>[
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>'bbb',
                    'qaa'=>[
                        'aaa'=>'bbb',
                        'bbb'=>'bbb',
                        'ccc'=>'bbb',
                        'ddd'=>'bbb',
                        'eee'=>'bbb',
                        'fff'=>'bbb',
                        'add'=>'bbb',
                        'dse'=>'bbb',
                        'dad'=>'bbb',
                        'dsa'=>'bbb',
                        'das'=>'bbb',
                        'ewq'=>'bbb',
                        'qer'=>'bbb',
                        'qad'=>'bbb',
                        'asz'=>'bbb',
                        'gda'=>'bbb',
                        'abc'=>'bbb',
                        'vbv'=>'bbb',
                        'ewq'=>'bbb',
                        'tew'=>'bbb',
                    ],
                ],
            ],
        ],
 ]
];
$time = microtime_float();
echo 'first start: '.$time."\n";

//for ($i = 0 ; $i<5000000; $i++) {
//     
//  a($arr);
//}
a($arr);

$end = microtime_float();
echo 'first end:'.$end."\n";
echo 'value used:'.bcsub($end , $time,4);
echo "\n";
echo "\n";
echo "\n";

$time = microtime_float();
echo 'second start:'.$time."\n";

//for ($i = 0 ; $i<5000000; $i++) {
//  b($arr);
//}

b($arr);

$end = microtime_float();
echo 'second end:'.$end."\n";
echo 'second used:'.bcsub($end,$time,4);
echo "\n";

测试方法:

watch -n 1 -d php test.php

// 输出 
first start: 1539332451.0195
first end:1539332451.0197
value used:0.0002



second start:1539332451.0198
second end:1539332451.0198
second used:0.0000

first start: 1539332463.6168
first end:1539332463.6169
value used:0.0001



second start:1539332463.6169
second end:1539332463.6169
second used:0.0000

结论:

  • 传引用的性能要高于传值,特别是传递的值比较大的时候,性能会很明显。这是因为传引用只是复制了地址(一个16进制数)
  • 并发的瓶颈一般不会再php,而是在框架、在数据库。