Benchmark de métodos de atribuição do PHP

You are able to see this post in english too.

Olá!

Este post mostrará um benchmarking entre as formas de atribuição suportadas pelo PHP:
a) Atribuição simples (ex.: $j = $j + 1);
b) Atribuição com associação à direita (ex.: $j += 1);
c) Atribuição não associativa (ex.: $j++);

O material de teste:

  • Máquina: Dell Optiplex 755;
  • Ambiente: Bash, sem X. Sistema de arquivos Ext4;
  • uname -a:
    Linux optiplex755 2.6.34.8-68.fc13.x86_64 #1 SMP Thu Feb 17 15:03:58 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

  • php -v:
    PHP 5.3.5 (cli) (built: Jan 7 2011 18:46:32)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

Todos os arquivos do teste podem ser baixados aqui. A metodologia aplicada foi:
1) Desligar a máquina por 1 minuto;
2) No bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output01.log; done;
3) Desligar a máquina por mais 1 minuto;
4) No bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output02.log; done;
5) Desligar a máquina novamente, por mais 1 minuto;
6) No bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output03.log; done;

Repetiu-se as ações acima para os arquivos t2.php e t3.php.

Os arquivos t1.php, t2.php e t3.php possuem cada um três arquivos de log com seus tempos de execução. Os 300 resultados de cada script foram então ordenados de forma ascendente pelo tempo de execução e descartou-se os 100 melhores e os 100 piores resultados de cada um, ficando então somente com os 100 melhores tempos médios de execução.

O resultado:

Gráfico - Comparando os tempos de execução
Gráfico - Comparando os tempos de execução

O gráfico mostra que utilizar o método “($j += 1)” ou o método “($j++)” pode lhe render até 0.02 segundo de vantagem, em média.

Alteraremos nosso documento de Coding Standards para que se prefira sempre um dos métodos que levaram vantagem na comparação, economizando ainda mais tempo de processamento.

Benchmarking of attribution methods of PHP

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

Hey!!

This post will show you a benchmarking among the attribution ways supported by PHP:

a) Simple attribution (ex.: $j = $j + 1);
b) Right association attribution (ex.: $j += 1);
c) Non-associative attribution (ex.: $j++);

Test material:

  • PC: Dell Optiplex 755;
  • Environment: Bash, without X. Ext4 filesystem;
  • uname -a:
    Linux optiplex755 2.6.34.8-68.fc13.x86_64 #1 SMP Thu Feb 17 15:03:58 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

  • php -v:
    PHP 5.3.5 (cli) (built: Jan 7 2011 18:46:32)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

All the files used and generated by the test can be downloaded here. The applied methodology follows:
1) Turn off the PC by one minute;
2) @ bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output01.log; done;
3) Turn off the PC by one more minute;
4) @ bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output02.log; done;
5) Turn off the PC again, by one more minute;
6) @ bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output03.log; done;

The t1.php, t2.php and t3.php has each one three log files with its execution times. The 300 results of each script got ordered by by its execution time (ascendant way) and throwed out the 100 best and the 100 worst values, giving to us only the 100 best average execution times.

The result:

Graph - Comparing the execution times
Graph - Comparing the execution times

The graph shows that the use of “($j += 1)” or “($j++)” method can give you 0.02 second of advantage, in average.

We are going to modify our Coding Standards documents to preferring one of advantage methods that I have showed in this comparison, saving even more processing time.