2010-09-07 2 views
1

Я рендеринг около 3000 записей,сортировки Javascript получает повесить

я использую сортировку скрипт с открытым исходным кодом,

Когда я щелкните столбец, мой браузер получает повесить очень скоро,

я не могу в состоянии продолжить,

Есть ли какое-либо решение для этой проблемы.

link text

+1

Вам нужно будет опубликовать фактический код на своей странице. – Pointy

ответ

3

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 имеет пример, чтобы вы начали с сортировки слияния.

0

Вы сами ответили на свой вопрос таким образом.

Посмотрите на скрипт сортировки.

Сортировка 3000 записей, переупорядочение DOM и визуализация вывода.

Это наверняка потребует времени.

Этот скрипт, который вы используете, предназначен для небольших наборов записей.

Предложение: Использование сортировки на стороне сервера и рендеринг результатов на страницах, каждая страница содержит 50 записей. Для около 3000 записей у вас будет около 60 страниц.

Допустим, вы находитесь на 45-й странице. Затем вы запускаете SQL-запрос для сортировки (asc/desc) и пропускаете первые 44 * 50 записей и извлекаете следующие 50 записей (для 45-й страницы).

+0

, если разбиение на страницы означает, что я не получу страха ... для сортировки ... клиент сказал, что нет разбивки на страницы ... – Bharanikumar

+0

, тогда вам следует изменить алгоритм сортировки, как предложил @Justin. – Rahul

-1

Эта библиотека, похоже, использует манипуляции DOM для сортировки.

Лучше каждый раз генерировать таблицу и вводить ее с помощью innerHTML.
В современных javascript двигателях это выглядит мгновенно.

Даже IE6 хорош в этом.

Это, как говорится ... показывая 3000 строк человеку, является чем-то сомнительным.
Но это еще одна дискуссия;)

+0

Нет, все наоборот. Использование 'innerHTML' всегда медленнее, чем использование DOM, особенно в том случае, если вы рекомендовали. –

+0

Я хотел бы знать, какой тест привел вас к такому выводу. Мне нравятся движки шаблонов и использование innerHTML вместо DOM делают их очень быстрыми. Полностью удивлен вашим комментарием. – Mic

Смежные вопросы