通過從400X通過開關a.localeCompare(b)至(一個<b?-1:(a> b?1:0)排序加速比)
myArray.sort(function (a, b) {
return a.name.localeCompare(b.name);
});
切換一個JavaScript排序功能
myArray.sort(function (a, b) {
return (a.name < b.name ? -1 : (a.name > b.name ? 1 : 0));
});
我能夠以減少在Chrome中將~1700元素陣列從1993毫秒排序到5毫秒的時間。幾乎是400倍的加速。不幸的是,這是以正確排列非英文字符串爲代價的。
很顯然,當我嘗試進行排序時,我無法將UI阻塞2秒。有什麼我可以做,以避免可怕的慢localeCompare但仍然支持本地化的字符串?
考慮讓一個網絡工作者異步執行基於'localeCompare'的排序。您可能會發現,對這些數據進行序列化和反序列化所花費的時間超過了異步執行的好處,但值得一試。 –
這可能會工作,但2秒仍然很慢,以顯示結果。 –
你可以考慮一種不同的方法 - 比如讓列表從頭開始排序,所以你永遠不需要明確地排序它。數據來自哪裏? JavaScript已經實現了一些自我排序的數據結構:http://stackoverflow.com/a/5309821/139010或http://stackoverflow.com/a/3809836/139010 –