Update 2
Я послал мои обновления к первоначальному автору приведенного выше кода, но пока он не решит опубликовать его, here is my updated version. Это ускоряет использование стандартной встроенной сортировки(), если вы решите это сделать. Он также заменяет стабильный вид коктейля со стабильным видом слияния. Сортировка слияния происходит примерно так же быстро, как при использовании sort() в моих тестах. Надеюсь, это поможет.
Update
я больше не думаю, что существует большое расхождение между браузерами, насколько функция встроенной сортировки() обеспокоен. Хотя IE8, например, намного медленнее, чем Chrome, я не думаю, что он имеет отношение только к функции сортировки. Я сделал некоторые профилирования в IE8, используя некоторые случайные данные. Я обнаружил, что исходный код может быть значительно улучшен, когда данные столбца являются числовыми или датами. Помещение регулярных выражений в функции сравнения для этих типов данных сильно замедляет работу, потому что они каждый раз проводят сравнение между элементами, которые для 3000 элементов составляют около 60 000 сравнений. Количество регулярных выражений в два раза больше.Делая все это до начала сортировки, мы делаем 3000 регулярных выражений, а не 120 000. Это может быть примерно на 50% экономии времени. Я немного поправлю свои изменения в сортировочный код.
Кроме того, большую часть времени происходит переупорядочение элементов DOM, а не сортировка (если вы не используете сортировку шейкера). Если вы можете найти более быстрый способ сделать это, вы можете сэкономить некоторое время там, но я не знаю, как это сделать.
Оригинальный ответ:
Проблема здесь, возможно, придется делать с реальным рода. Если вы внесли какой-либо код в код (и прокомментировали какой-то другой код), то ваш код использует сортировку шейкера, чтобы получить стабильный вид. Сортировка шейкеров по существу представляет собой двунаправленный вид пузыря. Сорт пузыря очень медленный, O (N^2). Если вы не раскомментировали этот код, то он использует встроенную функцию sort() javascript с различными функциями компаратора. Проблема заключается в том, что функция sort() - implemented differently in different browsers, поэтому вам может понадобиться посмотреть, не возникает ли эта проблема в некоторых браузерах, а не в других. По-видимому, код Webkit по-прежнему использует выбор, или min, sort, который является O (N^2). Это почти заставляет меня плакать. Какой браузер вы использовали для проверки этого?
Если функция сортировки оказывается проблемой, вы можете попробовать изменить приведенный выше код, чтобы подать иск на сортировку или quicksort слиянием, которые являются O (N log N). Quicksorts немного сложнее избегать случаев O (N^2), поэтому вы можете захотеть придерживаться сортировки слияния. Кроме того, сортировка слияния является стабильной сортировкой. This page имеет пример, чтобы вы начали с сортировки слияния.
Вам нужно будет опубликовать фактический код на своей странице. – Pointy