Лучше ли вытащить весь набор данных, если на странице будет много фильтрации ajax? - PullRequest
0 голосов
/ 15 сентября 2010

У меня в основном есть эта веб-страница, где вы можете сузить результаты поиска, добавив и удалив определенные фильтры слева.

Содержимое, извлекаемое из базы данных, представляет собой список свойств, которые можноотфильтровано по:

  • Тип (Апартаменты, Лагерь, Ранчо, Рыболовный лагерь, Отель, Коттедж)
  • Активный отдых (Отдых на природе, Каякинг, Охота)
  • Расположение (Айдахо), Иллинойс, Индиана)

Поэтому каждый раз, когда я нажимаю на один из допустимых фильтров слева, он добавляет это к критериям фильтрации, которые используются в запросе ajax.Это объединяет минимальное количество необходимых таблиц и возвращает результаты.

Так что, если я поиграюсь и активирую / деактивирую, я могу легко выполнить около 20-30 запросов AJAX за минуту (Вам разрешено толькофильтруйте по одному каждому типу за раз, если только вы не деактивируете).

Вопрос: Интересно, должен ли я вместо этого извлекать все возможные свойства?и просто отфильтровывал их вместо того, чтобы запрашивать базу данных для каждого ajax-запроса, который имеет по крайней мере 2-3 LEFT JOIN с на транзакцию.

Там будет менее 100 свойств, я не имею дело ссотни или тысячи.

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Абсолютно: вытяните полный набор данных и отфильтруйте его.Допустим, каждый ваш запрос Ajax занимает 100 мс.Уже сейчас вы можете говорить о введении задержки в 2-3 секунды в ваше приложение, когда с вашим небольшим набором данных он вам действительно не нужен.

Если вы сузите список результатов, " объектно-ориентированный CSS " тоже может быть вашим другом.Подумайте о том, чтобы выразить различные свойства фильтра в виде классов и добавить выбранные пользователем фильтры к их родителям, а затем использовать CSS для отображения или скрытия релевантных результатов.

Например, если все ваши результаты отображаются какLI s под родителем UL, <ul class="idaho apartment"> может указывать на то, что пользователь отфильтровал все элементы квартиры Айдахо, в то время как следующий CSS скрыл бы остальные:

.apartment .camp, .apartment ranch ... { display : none; }
.idaho .illinois, .idaho indiana{ display: none; }

При таком подходе у вас есть одинсервер ударил и положился на браузер + JavaScript для обработки всего остального (а так как вы используете логические сравнения - результат либо имеет свойство, либо его нет - он может хорошо работать для вас).В любом случае, даже выбор узлов вручную, когда вы фильтруете, будет более быстрым, чем отправка запроса на фильтр.Кроме того, теперь у вас есть возможность кэшировать этот одиночный запрос к базе данных, что может сэкономить кучу накладных расходов, если вам потребуется выполнять сложные запросы.

Обслуживать полный набор!

0 голосов
/ 15 сентября 2010

Можете ли вы переписать ваш ajax-запрос, чтобы вместо возврата списка свойств он просто возвращал их идентификаторы?Сокращает ли это число LEFT JOIN s?

Тогда вы можете перебрать эти идентификаторы, вызвав другой ajax-запрос, чтобы получить свойства, которые вы еще не кэшировали из предыдущей фильтрации.

...