Вопрос

Я изучаю ситуации в веб-приложениях, ориентированных на базу данных, когда следует полагаться на сортировку таблиц на стороне клиента, а не на сортировку на стороне сервера.Одна конкретная ситуация, которая меня беспокоит, - это разбивка на страницы.

Какой наилучший подход был бы при попытке разбить на страницы большую таблицу (скажем, 10000 строк), а также отсортировать ее по определенному столбцу?

Я понимаю, что некоторые проблемы, связанные с этим, являются:

  • Я не могу вернуть всю таблицу на сторону клиента за один раз
  • Я не могу отсортировать до 10000 записей с помощью javascript
  • сортировка таблицы будет включать сортировку строк на всех страницах, а не только на текущей странице.

Итак, есть ли у вас еще какие-нибудь вопросы, которые можно добавить к этому списку?

Какой подход привел бы к хорошему сочетанию взаимодействия на стороне клиента и сервера, чтобы свести к минимуму нагрузку на сервер?


ДОПОЛНЕНИЕ:

Хорошо, сортировка по базе данных и возврат страницы запроса, предыдущей страницы и следующей страницы, по-видимому, являются лучшим выбором.

Теперь рассмотрим это:

Пользователь находится на странице (3 из 10) таблицы, отсортированной по серийному номеру.Теперь пользователь нажимает на заголовок с именем "username", желая отсортировать таблицу по имени пользователя.

Вопрос:Должен ли конечный результат быть "страница (1 из 10) отсортирована по имени пользователя" или это должна быть "страница (3 из 10) отсортирована по имени пользователя"?

Я знаю, что это очень субъективный вопрос, но что бы вы порекомендовали и почему?

Это было полезно?

Решение

Клиентскую часть лучше всего сохранить простой:Сортировка / подкачка Javascript предназначена только для очень маленьких наборов результатов - достаточно маленьких, чтобы пользователь не заметил снижения производительности.

Серверная сторона - это место, где вы можете оптимизировать нагрузку на сервер:

Нагрузка может проявляться в виде частых запросов на дополнительные страницы, большого количества строк / столбцов на странице и частых запросов на повторную сортировку.(Мы даже не говорили о фильтрации)

Таким образом, в зависимости от ваших пользователей и фактическое использование, вам может понадобиться некоторая форма кэширования.Обратите внимание, что это рекомендации на некоторое время ПОСЛЕ того, как вы узнаете, что делают ваши пользователи:

  • Для частых запросов страниц рассмотрите возможность того, чтобы некоторые Ajax-запросы предварительно загружали следующие несколько (и предыдущие) страниц, а затем меняли местами строки (через Javascript) в таблице по запросу пользователя.

  • Для страниц большого размера рассмотрите возможность хранения строк в кэше "самого последнего использования" приложения (памяти), чтобы базе данных не требовалось снова и снова выдавать одни и те же огромные куски данных.

  • Для частых обращений хорошим подходом является сохранение кэш-таблицы в SQL, содержащей только результаты.

И всегда, всегда, всегда соответствующим образом индексируйте базу данных.


Дополнительный ответ:

Мой очень субъективный ответ таков:Пользователь (я) хочет выполнить сортировку с произвольной страницы.Позволь им (мне).Нет ничего более раздражающего, чем находиться там, где вы хотите быть, и иметь приложение, отбрасывающее вас обратно в начало списка.

Еще одно соображение - это несколько уровней сортировки:вы хотите реализовать сортировку по серийному номеру, затем по имени пользователя?Подумайте, что делает Microsoft Excel или любое другое приложение, с которым знакомы ваши пользователи.Ваших пользователей, вероятно, устроит то, к чему они привыкли, включая возврат на страницу 1.

Другие советы

Базы данных - настоящие звери в сортировке и отборе данных.Так что лучше всего, безусловно, попросить клиента сообщить серверу: "Я хочу, чтобы страница X содержала Y строк, отсортированных по Z". Затем база данных делает свое дело, и клиент показывает результат.Чтобы повысить производительность, вы могли бы создать результаты кэширования вашего клиента, и, кроме того, вы могли бы сделать так, чтобы ваш код запрашивал следующую и предыдущие страницы после извлечения текущей, чтобы они могли быть показаны мгновенно по запросу.

Наилучшим подходом было бы выполнить сортировку и подкачку на уровне базы данных и вернуть только подмножество исходных данных, которые будут показаны только на экране.В этом сценарии нет javascript.

Если по каким-то причинам вы не можете выполнить сортировку и разбиение на страницы на уровне базы данных, то вам следует сделать это с помощью серверного скрипта.Javascript в этом сценарии тоже нет.

И худшим подходом было бы выполнять сортировку и подкачку с помощью javascript, что, конечно, вообще не рекомендуется по очевидным причинам.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top