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á 😉

About Adriano Laranjeira

Software engineer & developer See more at http://about.me/arglbr
This entry was posted in English and tagged . Bookmark the permalink.

1 Response to Atribuição simples x php_array

  1. Pingback: Adriano Laranjeira » Blog Archive » Simple assign vs. php_array

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s