Pequena comparação
Publicado em Developer
Eu respondi que para um relatório grande necessitaríamos de muita RAM para armazenar o dito cujo (deixo isso para outros programas que gostam de RAM por aí ;-), mas mesmo assim fiz alguns testes em relação à performance da coisa. "Caminhar" pelo array seria o melhor a fazer ali, mas em uma situação onde não se pudesse guardar a posição corrente, eu precisaria ir removendo os elementos do array, tão logo exibisse a linha de dados. Resolvi fazer um teste preenchendo o array, removendo seu elemento final usando pop, invertendo seus elementos e usando pop novamente (isso seria necessário para seguir a ordem do relatório, afinal, pop remove o último elemento, mas sem inverter iria imprimir o relatório de trás para frente) e finalmente usando shift (que remove o primeiro elemento, mas "empurra" todo o resto para baixo).
Fiz um teste com um array de 15000 elementos, aqui em um AMD Sempron 2500+. Preencher o array foi praticamente instantâneo, remover com pop, inverter e remover com pop também, mas usando shift levou 31 segundos.
Só por curiosidade resolvi fazer o mesmo teste em Ruby. Errr ... foi instantâneo. 0 segundos. Todos os testes. Resolvi aumentar o array para 150000 elementos (10x mais). 4 segundos. :-)
Discutindo um pouco com o pessoal (vejam bem, estávamos discutindo e conversando, ao contrário de muito sujeito que adora fazer flamewar com linguagens), a causa disso é por que todo array em PHP é um hash, como diz a sua documentação:
An array in PHP is actually an ordered map. A map is a type that maps values to keys. This type is optimized in several ways, so you can use it as a real array, or a list (vector), hashtable (which is an implementation of a map), dictionary, collection, stack, queue and probably more. Because you can have another PHP array as a value, you can also quite easily simulate trees.Fica bem prático, mas já deu para ver o preço que se paga na coisa. :-p
Atualizado em 25/05/2005 12:57 Xi, fiz barbeiragem. :-( Eu havia usado um shift no segundo teste, e não um pop. Usando pop a remoção dos elementos foi instântanea também. Mea culpa, já consertei o texto.
Tags:
Comentários
Comentários fechados.
Sem nenhum comentário.