Обновление 2
Я отправил свои обновления первоначальному автору вышеуказанного кода, но пока он не решит опубликовать его, вот моя обновленная версия . Это ускоряет использование стандартной встроенной функции sort (), если вы решите это сделать. Он также заменяет стабильную сортировку коктейлей стабильной сортировкой. Сортировка слиянием почти так же быстро, как использование sort () в моих тестах. Надеюсь, это поможет.
Обновление
Я больше не думаю, что между браузерами существует большое расхождение в том, что касается встроенной функции sort (). Хотя IE8, например, намного медленнее, чем, скажем, Chrome, я не думаю, что это связано только с функцией сортировки. Я сделал некоторые профилирования в IE8, используя некоторые случайные данные. Я обнаружил, что оригинальный код может быть существенно улучшен, когда данные столбца числовые или дата. Включение поисков регулярных выражений в функции сравнения для этих типов данных значительно замедляет процесс, потому что они выполняются каждый раз, когда выполняется сравнение между элементами, для которых для 3000 элементов это около 60 000 сравнений. Число регулярных выражений в два раза больше. Делая все это до начала сортировки, мы выполняем 3000 регулярных выражений, а не 120 000. Это может быть около 50% экономии времени. Я внесу свои изменения в сортируемый код чуть позже.
Кроме этого, большую часть времени переупорядочивает элементы DOM, а не сортирует (если вы не используете сортировку шейкера). Если вы можете найти более быстрый способ сделать это, вы можете сэкономить там время, но я не знаю, как это сделать.
Оригинальный ответ:
Возможно, проблема здесь связана с фактической сортировкой. Если вы откомментировали часть кода там (и закомментировали какой-то другой код), то ваш код использует сортировку шейкером для получения стабильной сортировки. Сортировка шейкеров по существу является двунаправленной пузырьковой сортировкой. Пузырьковые сортировки очень медленные, O (N ^ 2). Если вы не раскомментировали этот код, он использует встроенную функцию javascript sort () с различными функциями компаратора. Проблема в том, что функция sort () реализована по-разному в разных браузерах , поэтому вы можете захотеть увидеть, возникает ли эта проблема в некоторых браузерах, а не в других. По-видимому, в коде Webkit все еще используется выбор, или min, сортировка, которая равна O (N ^ 2). Это почти заставляет меня хотеть плакать. Какой браузер вы использовали для проверки этого?
Если проблема с функцией сортировки оказывается проблемой, то вы можете попробовать изменить приведенный выше код, чтобы подать в суд на сортировку слиянием или быструю сортировку, которые оба являются O (N log N). Быстрые сортировки немного сложнее, чтобы избежать случаев O (N ^ 2), поэтому вы можете использовать сортировку слиянием. Кроме того, сортировка слиянием является стабильной сортировкой. На этой странице приведен пример начала сортировки слиянием.