Contexto: Estou construindo um pequeno site que lê um feed rss e atualiza / verifica o feed em segundo plano. Eu tenho uma matriz para armazenar dados a serem exibidos e outra que armazena IDs de registros que foram mostrados.
Pergunta: Quantos itens um array pode conter em Javascript antes que as coisas comecem a ficar lentas ou lentas. Não estou classificando a matriz, mas estou usando a função inArray do jQuery para fazer uma comparação.
O site continuará funcionando e atualizando, e é improvável que o navegador seja reiniciado / atualizado com tanta frequência.
Se eu fosse pensar em limpar alguns registros do array, qual é a melhor maneira de remover alguns registros após um limite, como 100 itens.
javascript
arrays
adicionado adorável
fonte
fonte
Respostas:
O comprimento máximo até "ficar lento" depende totalmente da sua máquina-alvo e do seu código real, então você precisará testar nessa (s) plataforma (s) para ver o que é aceitável.
No entanto, o comprimento máximo de uma matriz de acordo com a especificação ECMA-262 5ª Edição é limitado por um inteiro de 32 bits sem sinal devido à operação abstrata ToUint32 , então a maior matriz possível poderia ter 2 32 -1 = 4,294,967,295 = 4,29 bilhões de elementos .
fonte
Não há necessidade de aparar a matriz, simplesmente endereça-a como um buffer circular (índice% maxlen). Isso garantirá que ele nunca ultrapasse o limite (implementar um buffer circular significa que, uma vez que você chegue ao final, você retorne ao início novamente - não é possível ultrapassar o final do array).
Por exemplo:
fonte
Você pode tentar algo assim para testar e cortar o comprimento:
http://jsfiddle.net/orolo/wJDXL/
fonte
Como @maerics disse, sua máquina-alvo e navegador irão determinar o desempenho.
Mas para alguns números do mundo real, em meu Chromebook corporativo de 2017, executando a operação:
x=5e4
leva 16 ms, bom o suficiente para 60 fpsx=4e6
leva 250 ms, o que é perceptível, mas não é grande coisax=3e7
leva 1300ms, o que é muito ruimx=4e7
leva 11000ms e aloca 2,5 GB extras de memóriaPortanto, cerca de 30 milhões de elementos é um limite superior rígido, porque a VM javascript cai de um penhasco com 40 milhões de elementos e provavelmente travará o processo.
fonte
Eu construí uma estrutura de desempenho que manipula e representa graficamente milhões de conjuntos de dados e, mesmo assim, a latência de cálculo de javascript era da ordem de dezenas de milissegundos. A menos que você esteja preocupado em ultrapassar o limite de tamanho do array, não acho que tenha muito com que se preocupar.
fonte
Será muito dependente do navegador. 100 itens não parece um grande número - espero que você possa ir muito mais alto do que isso. Milhares não devem ser um problema. O que pode ser um problema é o consumo total de memória.
fonte
Eu descaradamente puxei alguns conjuntos de dados muito grandes na memória e, embora tenha ficado lento, levou cerca de 15 Mo de dados para cima com cálculos bastante intensos no conjunto de dados. Duvido que você tenha problemas com a memória, a menos que tenha cálculos intensos sobre os dados e muitas linhas. A criação de perfil e benchmarking com diferentes conjuntos de resultados simulados será sua melhor aposta para avaliar o desempenho.
fonte