Simple assign vs. php_array

Você pode ler este post em português também.

Hello!

The April article was released at May. The May one, will be released at May too? 😉

No more talking. This post compares the performance of each way to assign a value to an array:

  • Simple assign (ex: $a[] = 1);
  • By array_push function (ex: array_push($a, 1));

In PHP website:

array_push: a tip

I think that a performance test of the two ways shows how much better is to free the HEAP area from functions calls. Let’s know the test tools:

  • Computer: Dell Optiplex 755;
  • OS: Fedora GNU/Linux 12, X86_64 architecture;
  • PHP: Version 5.3.2, from Fedora repositories;
  • Environment: Bash, no X. EXT4 file system;
  • File array.php:
    <?php $a = array(); for ($i = 0; $i < 1000000; $i++) { $a[] = 1; }?>
  • File array_push.php:
    <?php $a = array(); for ($i = 0; $i < 1000000; $i++) { array_push($a, 1); } ?>

    • Execute each of the PHP scripts 100 times, saving the execution time in each iteration:
      for i in `seq 1 100`; do /usr/bin/time -f "%e" php array.php 2>> array.log; done;
      for i in `seq 1 100`; do /usr/bin/time -f "%e" php array_push.php 2>> array_push.log; done;
      Obs.:The PC was turned off by 30 seconds between each test.
    • Order the execution times, from smallest to largest;
    • Throw away the 25 first and the 25 last execution times;
    • Plot the 50 remaining results.
  • Method:

    Test results

    Conclusion: Perform a code review changing array_push calls by simple assigns will give you few seconds faster. So do it right now ;-).

    Regards!

Atribuição simples x php_array

You can see this post in english too.

Olá!

O artigo de Abril saiu em Maio. O de Maio, sairá em Maio? 😉

Sem mais conversa. Este post mostra o desempenho das duas formas de se atribuir elementos em um array:

  • Atribuição simples (ex: $a[] = 1);
  • Pela função array_push (ex: array_push($a, 1));

Está lá no website do PHP:

array_push: um conselho

Acho que testar o desempenho das duas formas mostrará o quanto é melhor livrarmos a área de heap de uma chamada de função. Vamos conhecer o material de teste:

  • Máquina: Dell Optiplex 755;
  • Sistema operacional: Fedora GNU/Linux 12, arquitetura X86_64;
  • PHP: Versão 5.3.2, pacotes dos repositórios do Fedora;
  • Ambiente: Bash, sem X. Sistema de arquivos EXT4;
  • Arquivo array.php:
    <?php $a = array(); for ($i = 0; $i < 1000000; $i++) { $a[] = 1; }?>
  • Arquivo array_push.php:
    <?php $a = array(); for ($i = 0; $i < 1000000; $i++) { array_push($a, 1); } ?>
  • Método

    • Executar cada um dos scripts PHP 100 vezes, armazenando o tempo de execução de cada um:
      for i in `seq 1 100`; do /usr/bin/time -f "%e" php array.php 2>> array.log; done;
      for i in `seq 1 100`; do /usr/bin/time -f "%e" php array_push.php 2>> array_push.log; done;
      Obs.:PC deslisgado por 30 segundos entre cada teste.
    • Ordenar os tempos de execução de cada script, do menor para o maior;
    • Descartar os 25 primeiros e 25 últimos tempos de execução;
    • Plotar a amostragem restante.

    Plotagem do resultado dos testes

    Conclusão:Realizar um code review para trocar as chamadas array_push por atribuições simples lhe dará alguns segundos de ganho. Faça isso já 😉