Passando una funzione di ordinamento JavaScript dal400x ordinamento Speedup commutando a.localeCompare (b) a (un <b?-1:(a> b 1: 0))
myArray.sort(function (a, b) {
return a.name.localeCompare(b.name);
});
a
myArray.sort(function (a, b) {
return (a.name < b.name ? -1 : (a.name > b.name ? 1 : 0));
});
ho potuto per ridurre il tempo necessario per ordinare un array di elementi ~ 1700 in Chrome dal 1993 in millisecondi a 5 millisecondi. Quasi un aumento di velocità di 400x. Purtroppo questo è a scapito del corretto ordinamento di stringhe non inglesi.
Ovviamente non riesco a bloccare l'interfaccia utente per 2 secondi quando provo a fare un ordinamento. C'è qualcosa che posso fare per evitare il localCompare orribilmente lento ma mantenere ancora il supporto per le stringhe localizzate?
Prendere in considerazione la possibilità di far girare un operatore Web per eseguire l'ordinamento basato 'localizzatoCompare' in modo asincrono. Potresti scoprire che il tempo speso per serializzare e deserializzare quella quantità di dati supera i vantaggi di farlo asincrono, ma vale la pena provare. –
Probabilmente funzionerebbe, ma 2 secondi sono ancora molto lenti per mostrare i risultati. –
Si potrebbe considerare un approccio diverso, ad esempio mantenere l'elenco ordinato dall'inizio, quindi non è necessario ordinarlo in modo esplicito. Da dove vengono i dati? Esistono alcune strutture di dati self-sorting per JavaScript già implementate: http://stackoverflow.com/a/5309821/139010 o http://stackoverflow.com/a/3809836/139010 –