Есть сайт с карточками компаний
Их около 3000
Как правильно сделать фильтрацию? Есть фильтры по типу, цене, рейингу и тд
Если делать клиенткую фильтрацию, т опридется на сервере грузить все 3к компаний
Если серверную, то запрос заимает 5 секунд
Если грузить на сервер условно 20 компаний, а остальные догружать, то как будет работать фильтрация?
Все равно же придется грузить отфильтрованне компании из бд
Если для фильтрации всего лишь 3000 записей на бекенде коду требуется 5 секунд - что-то сделано принципиально не правильно на стороне бекенда.
Моё мнение - правильнее фильтрацию делать на бекенде, и грузить на фронт только 1 страницу отфильтрованных данных (и далее по пагинации или по скроллу подгружать следующие страницы)
kollfun,
1. Эти 3000 записей хранятся в БД? Какая СУБД используется? На каком ЯП написан бекенд?
В PostgreSQL например есть методы работы с координатами (расширение PostGIS), расчета расстояния и сортировки по этому расстоянию.
2. "проверию название, описаник, адрес и все услуги и категории" - это лучше фильтровать на уровне запроса к БД, перед расчетом расстояния.
3. "рядом со мной" - если есть координаты пользователя и координаты записи, то посчитать расстояние - это чистая математика, которая на любом ЯП занимает очень малое время.
Правильно там, где быстрее. Если запрос к серверу за данными и их обработку порождает маленький трафик и большой расчет - то на клиенте, чтобы не грузить сервер, если большой трафик и маленький расчет - то на сервере, чтобы не грузить канал связи между клиентом и сервером.
На вопрос нет однозначного ответа, все делается под конкретную задачу и конкретные обстоятельства. Но как выше было правильно сказано, если простой расчет занимает кучу времени - то начать следует с оптимизации структуры данных и запросов.
Ну и средства повышения производительности, как то кэширование и балансировщики нагрузки никто не отменял.