Я разрабатываю приложение с API поиска рейсов (Multicom FindAndBook), которое возвращает большие результаты на основе заданного ввода.
Моя проблема заключается в том, как я могу отфильтровать возвращенные данные (цена, время прибытия, время отправления, количество остановок и название авиакомпании)? Я нашел три решения для фильтрации
1) Фильтрация данных на стороне клиента с помощью jQuery
Но здесь я фильтрую данные с помощью jQuery, но мне трудно разбить отфильтрованные данные на страницы.
2) Выполнение Ajax-запроса к серверу для фильтрации с использованием PHP
Но для загрузки данных требуется больше времени.
3) Сброс результатов поиска в базу данных WebSQL и фильтрация данных на клиенте.
Здесь я могу фильтровать данные, но правильно ли фильтровать данные из локальной базы данных?
Может ли кто-нибудь сказать мне, как правильно добиться высокой производительности?
Изменить:
API не обеспечивает фильтрацию, но каждый запрос фильтра занимает много времени (до 30 секунд). Я решил, что лучше получить все данные поиска и отфильтровать данные результатов.
Это Fiddle для моей фильтрации jQuery:
$(function () {
var minPrice = 299,
maxPrice = 1099,
$filter_lists = $("#filters ul"),
$filter_checkboxes = $("#filters :checkbox"),
$items = $("#computers li.system");
$filter_checkboxes.click(filterSystem);
$('#slider-container').slider({
range: true,
min: minPrice,
max: maxPrice,
values: [minPrice, maxPrice],
slide: function (event, ui) {
$("#amount").val("$" + ui.values[0] + " - $" + ui.values[1]);
minPrice = ui.values[0];
maxPrice = ui.values[1];
filterSystem();
}
});
$("#amount").val("$" + minPrice + " - $" + maxPrice);
function filterSlider(elem) {
var price = parseInt($(elem).data("price"), 10);
console.log(price);
return price >= minPrice && price <= maxPrice;
}
function filterCheckboxes(elem) {
var $elem = $(elem),
passAllFilters = true;
$filter_lists.each(function () {
var classes = $(this).find(':checkbox:checked').map(function () {
return $(this).val();
}).get();
console.log('classes', classes);
var passThisFilter = false;
$.each(classes, function (index, item) {
if ($elem.hasClass(item)) {
console.log('hasClass', item);
passThisFilter = true;
return false; //stop inner loop
}
});
if (!passThisFilter) {
passAllFilters = false;
return false; //stop outer loop
}
});
return passAllFilters;
}
function filterSystem() {
$items.hide().filter(function () {
return filterSlider(this) && filterCheckboxes(this);
}).show();
}
});