2011-07-20 7 views
0

Я программирую веб-приложение, похожее на отели или летающий искатель.Где лучше всего фильтровать данные запроса AJAX?

Я посмотрел, например, http://www.momondo.com/.

Этот веб-сайт показывает вам 1700 отелей, и вы можете фильтровать. Вы можете выбрать 3 запуска, повторить выбор 3, удалить 2 запуска, Интернет в комнате, диапазон цен ... Но фильтр кажется, что не используйте сеть, чтобы сделать другой запрос в базу данных.

Отфильтровать результат в браузере клиента?

Как вы думаете? Браузер поддерживает информацию о загрузке 1700 гостиниц в память?

ответ

0

Современные веб-браузеры поддерживают то, что известно как «localstorage» или «Web Storage».

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

Если вы имеете дело с огромными наборами данных, вы будете настаивать на ограничениях браузера и должны заставить людей перенастроить свой браузер, но вы, вероятно, не будете показывать им 500 МБ данных одновременно, поэтому это может быть более эффективным с точки зрения сети, чтобы разделить данные на более мелкие куски.

Что касается «лучшего» решения ... это, вероятно, зависит от того, сколько данных они понадобятся по отношению к всему набору данных. Я имею дело с некоторыми базами данных, которые составляют десятки миллионов записей, поэтому я использую сервер фильтрации, но если они хотят сделать дополнительную фильтрацию после первоначального поиска, мне лучше сделать это на стороне клиента, просто чтобы разгрузить обработки и уменьшения сетевого трафика.

+0

Например, с 1600 результатами текста с информацией о гостинице не будет иметь проблем в производительность для фильтра нет? – Rom

+0

@Joe localstorage или webstorage поддерживаются во всех браузерах? – Awea

+0

@Awea: все браузеры, которые в настоящее время используются? Нет. Но вы можете использовать JavaScript для обнаружения поддержки localstorage, а затем либо использовать альтернативные методы, либо грамотно деградировать, если вы не можете сделать все это на стороне клиента. – Joe

0

Отфильтровать результат в браузере клиента?

Я так не считаю. Возможно, вы можете вызвать скрипт с помощью ajax, чтобы отобразить отфильтрованные данные. Я думаю, что он более легкий ^^ для браузера клиента.

Как вы думаете? Браузер поддерживает информацию о загрузке 1700 гостиниц в память?

Да он должен работать с легкой DATAS, но с большой задержкой для огромной DATAS (большими массивами * 1700) Вы можете просто отправить ограниченное количество отелей со сценарием, созванного Ajax, который фильтруется ДАННЫЕ для отправки.

+0

Тогда вы думаете, что лучшее решение - это один запрос к базе данных, когда пользователь хочет фильтр? – Rom

+0

Например: один запрос, чтобы получить соответствие города (автозаполнение), другой запрос с идентификатором выбранного города и интернет в комнате и т. Д. – Awea

1

Да, вы можете избежать использования сети все время, если вы уверены, что ваше общее количество отелей - 1700 или около того. Определенно браузер может справиться с этим. Просто обрабатывайте дом в автономном режиме, и вы должны быть в порядке (подробнее об этом ниже). И, конечно, по мере увеличения числа отелей, вы можете подумать о переносе фильтрации на сервер.

Таким образом, ключевой момент заключается в том, что изменения в доме неактивны. Под этим я подразумеваю, что браузер занимает некоторое время, чтобы перекрасить дом - и перекраска dom происходит каждый раз, когда вы делаете любое изменение дома. Поэтому, если вы делаете .hide() и .show() из 1700 элементов jquery, которые являются частью dom, это станет причиной значительного замедления.

Решение: используйте jquery .detach() для всех элементов отеля, а затем выполните скрытие/шоу. В отличие от.remove() будет содержать любые события, привязанные к этим элементам, когда вы добавляете их обратно в dom. И, выполняя функцию hide/show «offline» (в то время как они отсоединены от dom), вы должны перекрасить dom (дорогостоящую операцию) только один раз, когда вы добавите их обратно.

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