Как эффективно разрешить пользователю сортировать список с помощью AJAX - PullRequest
0 голосов
/ 08 февраля 2011

В моем приложении у пользователей есть список элементов, которые они могут разместить в любом порядке.Схема базы данных выглядит следующим образом:

Items
+ Id : int
+ Name : string
+ Order : int

, поэтому, когда пользователь упорядочивает вещи, он соответственно устанавливает поле Order, чтобы я мог отсортировать его позже.Отлично.

Теперь я хочу сделать сортировку ajax-y, чтобы пользователь мог перетаскивать элементы по порядку (и использовать стрелки вверх / вниз), и он просто автоматически сохранит все.(Если вы знакомы с Netflix, они делают то же самое.)

Проблема, с которой я сталкиваюсь, заключается в том, что для того, чтобы сохранить изменения пользователя по мере их внесения, мне потребуется выполнить вызов AJAX.каждый раз, когда они что-то делают.Если пользователь перемещает элемент из позиции 10 в позицию 1, это означает, что мне нужно обновить 10 записей в этом маленьком вызове ajax.Между тем, пользователь мог поставить в очередь еще 3 вызова AJAX для обновления других записей.

Это кажется неэффективным и может привести к ошибкам (из-за условий гонки и т. Д., Если вызовы AJAX занимают много времени.) Должен ли я беспокоиться об этом?Есть ли более эффективный способ сделать это?Если что-то изменится, я ожидаю, что у большинства пользователей будет менее 5 элементов для сортировки.

1 Ответ

0 голосов
/ 09 февраля 2011

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

Однако лично я думаю, что вместо того, чтобы выбрать вариант, который может привести к условиям гонки, я бы выбрал один из следующих вариантов:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...