dans js je dois trier beaucoup d'éléments de tableau (100k-1kk). Dans la production son possible d'avoir beaucoup blank ('') chaînes.gérer les chaînes vides à array.sort (?) Callback dans chrome est très lent
dans ma fonction de tri i gérer des valeurs vides - de sorte que ces valeurs viennent toujours en dernier .Son ok .. jusqu'à ce que je ai beaucoup nulle ou non définie ou vide (« ») valeurs dans les données
si les données ont de nombreux zéros par exemple ou des chaînes vides, les performances sont très lentes.
Et la chose principale est que ce fragment très lent à Chrome (au moins pour l'instant dernière version 49.0.2623.110 m)
Firefox (45.0.1) fonctionne très bien (même avec Standart cas sans données vides mon test x10 plus rapide ??) juste test.with chrome et firefox
PS Je sais que jsperf est plus préférable pour that.anyway
https://jsfiddle.net/3h0gtLu2/18/
data = []
var i = 0;
while (i++ <1000){
data.push('' + i)
}
while (i++ < 20000){
data.push(''+i )
}
var start = window.performance.now()
data.sort(function(a,b){
if (a == null || a == undefined)
return 1;
else if (b == null || b == undefined)
return -1;
return (parseInt(a) - parseInt(b));
})
$('#time0').html($('#time0').html() + (window.performance.now() - start))
data = []
var i = 0;
while (i++ <1000){
data.push('' + i)
}
while (i++ < 20000){
data.push(null )
}
var start = window.performance.now()
data.sort(function(a,b){
if (a == '' || a === null || a == undefined)
return 1;
else if (a == '' || b === null || b == undefined)
return -1;
return (parseInt(a) - parseInt(b));
})
$('#time1').html($('#time1').html() + (window.performance.now() - start))
data = []
var i = 0;
while (i++ <1000){
data.push('' + i)
}
while (i++ < 20000){
data.push('' )
}
var start = window.performance.now()
data.sort(function(a,b){
if (a == null || a == undefined)
return 1;
else if (b == null || b == undefined)
return -1;
return (parseInt(a) - parseInt(b));
})
$('#time2').html($('#time2').html() +(window.performance.now() - start))
data = []
var i = 0;
while (i++ <1000){
data.push('' + i)
}
while (i++ < 20000){
data.push('' )
}
var start = window.performance.now()
data.sort(function(a,b){
if (a == '' || a == null || a == undefined)
return 1;
else if (b == '' || b == null || b == undefined)
return -1;
return (parseInt(a) - parseInt(b));
})
$('#time3').html($('#time3').html() +(window.performance.now() - start))
Si vous ne postez pas le code, il est peu probable que quelqu'un puisse vous aider. – Pointy
code désolé posté :) –
Le problème est que votre fonction de comparaison de tri est incohérente, et cela peut rendre l'algorithme de tri devenir fou. Pour les deux mêmes valeurs, votre comparateur doit toujours retourner exactement la même réponse. – Pointy