Фильтрация без запросов к БД

C
На сайте с 26.12.2005
Offline
146
707

Доброго.

На примере динамического подбора опций в фильтре (когда варианты следующей опции зависят от выбора первой и т.д.)

Если данные брать не из БД, а из массива в JS, подключенного внешним файлом и обрабатывать их уже на стороне клиента,

это существенно ускорит отклик и снизит нагрузку на сервер.

Вообще плюсов много.

Один только минус.

Первый раз этот массив все же придется загрузить.

Есть ли какие-то моральные принципы? Какой допустимый обьем данных можно вешать на юзера таким образом не испортив карму?

Лучший хостинг, которым пользовался за последние 15 лет! (https://beget.com/p107248)
LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#1

А зачем вешать JS массивы, если есть такая штука как ajax?

Если у вас идёт долгая выборка из БД надо что-то менять в БД и в структуре.

Там операции должны выполняться менее, чем за секунды.

это существенно ускорит отклик и снизит нагрузку на сервер.

Сервер нужен для того, чтобы держать нагрузку. А клиент браузер должен быстро и легко работать.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
C
На сайте с 26.12.2005
Offline
146
#2
LEOnidUKG:
А зачем вешать JS массивы, если есть такая штука как ajax?

Если у вас идёт долгая выборка из БД надо что-то менять в БД и в структуре.
Там операции должны выполняться менее, чем за секунды.




Сервер нужен для того, чтобы держать нагрузку. А клиент браузер должен быстро и легко работать.

Уже 5 лет как на аяксе работает. НО!

Если у клиента пинг хоть немного не мгновенный, то это портит всю картинку.

ПОпробуйте вот через 3G денек поработать. Пинг проседает часто.

То, что на стационарном интернете было бесшовным, на 3Г заметно дергается.

Пользуюсь сайтом одним, забугорным. Там вообще вся инфа тупо в JSON выгружена прямо в код. А JS уже рендерит страницу.

Это конечно крайность, но я думаю золотая середина все же есть. Какую-то часть повесить на пользователя имеет смысл.

При условии что один человек может несколько десятков раз фильтр жмакать он и трафик сэкономит свой в итоге.

[Удален]
#3

LEOnidUKG, перекладывать часть нагрузки на клиента - это нормальная практика

тут скорей вопрос к архитектуре и количестве позиций в выборке

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

webiumpro
На сайте с 20.03.2017
Offline
39
#4

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

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

А если так хочется повесить нагрузку на клиента, что аж зубы сводит, то local storage, на мой взгляд, будет уместнее, чем подгрузка json в код.

Копирование лендингов. Разработка на фреймворке сервисов. Создание сайтов (/ru/forum/994418)
LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#5
ПОпробуйте вот через 3G денек поработать. Пинг проседает часто.

А пока скачаются все данные в JS через 3G и ждать пока они прогрузятся, так это нормально?

LEOnidUKG, перекладывать часть нагрузки на клиента - это нормальная практика

Вполне. А потом в соседней ветке жаловаться, что Гугл мало баллов дал за загрузку сайта :)

Вообще хотелось бы увидеть сам сайт и что хочет конкретно этим добиться.

[Удален]
#6
LEOnidUKG:
Вполне. А потом в соседней ветке жаловаться, что Гугл мало баллов дал за загрузку сайта

с умом надо делать и проблем не будет

webiumpro:
на мой взгляд, будет уместнее, чем подгрузка json в код

ну с дуру можно и сами знаете что сделать

Gerga
На сайте с 02.08.2015
Offline
94
#7

Charli, как заметил burunduk, кешируйте результат выборки на сутки/неделю/месяц. Каждый запрос фильтра проверяйте на наличие и актуальность кеша. Если все ок, отдавайте результат из кеша. Если нет, делайте запрос к БД, сохраняйте результат в кеш и отдавайте клиенту. Конечно если эти махинации действительно необходимы.

edogs software
На сайте с 15.12.2005
Offline
775
#8
Charli:
Если данные брать не из БД, а из массива в JS, подключенного внешним файлом и обрабатывать их уже на стороне клиента,
это существенно ускорит отклик

Не обязательно.

Если Вы говорите о внешнем файле, то видимо это не 3-5-8-13... 89-144 значений, которые можно вкрячить прямо на страницу.

По нашему опыту если список больше чем из 100 значений, то в среднем по палате аяксовый запрос на сервер даст более быстрый и надежный по скорости отклик, чем выборка и подстановка значений яваскриптом.

Так вообще-то не должно быть, вроде эти селекты не бином ньютона, но как-то вот всё время так получается.

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

В общем на практике - если варианты селектов на клиенте переходят за сотню числом, то мы говорим "ну его на фиг" и стараемся увести обработку на сервер. just in case.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий