Pesquisar

sábado, 15 de setembro de 2018

Performance com Array

Quando trabalhamos no desenvolvimento de aplicativos para dispositivos móveis, temos que ter como preocupação a perfomance de nosso algoritmo para não criarmos aplicações lentas. Algoritmos simples como percorrer uma coleção, pode impactar de forma negativa na experiência do seu app.

Nesse artigo, veremos a performance para percorrermos uma lista simples utilizando diferentes formas.



Criando um array numérico

Na primeira "bateria" de testes, iremos criar um simples array com valor numérico para validarmos o tempo que levamos para percorrer:

import Foundation
let array = Array(repeating: 0, count: 10000)


Criamos um array com valores iguais e tamanho 10.000, não estamos preocupados em relação ao espaço de memória em uma lista, por isso, criamos de forma simples.

Percorrendo o array

import Foundation
let array = Array(repeating: 0, count: 10000)
var start = CFAbsoluteTimeGetCurrent()
for _ in array { }
var end = CFAbsoluteTimeGetCurrent()
print("for in -> \(end - start) seconds")
start = CFAbsoluteTimeGetCurrent()
_ = array.map { $0 }
end = CFAbsoluteTimeGetCurrent()
print("map -> \(end - start) seconds")
start = CFAbsoluteTimeGetCurrent()
_ = array.filter({ _ in return true })
end = CFAbsoluteTimeGetCurrent()
print("filter -> \(end - start) seconds")
start = CFAbsoluteTimeGetCurrent()
_ = array.compactMap { $0 }
end = CFAbsoluteTimeGetCurrent()
print("compactMap -> \(end - start) seconds")
start = CFAbsoluteTimeGetCurrent()
_ = array.flatMap{ $0 } // Deprecated
end = CFAbsoluteTimeGetCurrent()
print("flatMap -> \(end - start) seconds")


Resultado obtido


Utilizar o bom e velho for in é muito mais performático para coisas simples 😅.