169 похожих чатов

Задумался, каким образом в крупных интернет магазинах формируется ссылка с

параметрами, наверняка они перепробовали кучу способов и выбрали оптимальный.

Например, берем Amazon, Ebay, Wildberries, Aliexpress, Tmall, Yandex Market.
Что мы видим? После каждого изменения фильтров изменения записываются в адресную строку, делается get-запрос к бекенду и обновляется страница. Сортировка, пагинация при большом количестве данных тоже выполняются серверно и добавляются в этот запрос.

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

Фильтров всегда много
1 вариант. Хранение настроек фильтрации можно реализовать с помощью глобальной переменной - объекта настроек фильтрации paramsObj, который через стандартный метод (или это конструктор)new URLSearchParams(paramsObj); превращается в параметры адресной строки. Тогда перезаписывать адресную строку потребуется всего один раз, при отправке запроса (понятно, что запрос отправляется после каждого изменения фильтров, но здесь он в коде будет в одном месте только - в месте отправки запроса). Минус - глобальные переменные - это засорение глобальной области видимости, да и я когда-то пробовал вынести создание этой переменной в отдельный модуль ничего не заработало.

2 вариант.
Хранить в localstorage.
Вернемся к задаче: После перезагрузки страницы параметры фильтрации не сбрасываются, думаю, что это потому что ф5 собственно адресную строку не трогает и все сохраняется, так и надо.
При этом при входе с новой вкладки на ту же страницу без параметров - параметров в адресной строке нет.

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

Еще не рассматривал cookies, архитектурно подход с ними звучит идентичным с localstorage. Осложняется те, что никогда с кукиз не работал и не особо представляю, что это такое

3 вариант
Можно использовать в качестве хранилища саму адресную строку - считывать ее данные с помощью стандартных свойств и методов наподобие window.location, парсить, добавлять/изменять нужное свойство и записывать обратно. Звучит немного костыльно, но не дублирует функционал и неплохо архитектурно.

По быстродействию и нагрузке на клиентское железо идей нет.

Если использовать вебсокеты, а конкретно нравится socket.io, то это влияет на схему? Необходимо ли сразу добавлять реализацию response-request для сокетов?

5 ответов

14 просмотров

зачем для этого сокеты я ащ не понял ну и переменная - тоже. плюсы как раз того, что оно все в url, вы можете скинуть это кому-то, и он сможет сразу же увидеть ту же картину. тут переменным откуда взяться?

Андрей- Автор вопроса
i7 4n
зачем для этого сокеты я ащ не понял ну и переменн...

все 3 варианта должны работать одинаково и поддерживать параметры url, это же зависит от типа запроса, get/post сокеты - уже отдельная тема - реализация, для быстро обновляющихся на сервере данных они дают хороший прирост

Андрей
все 3 варианта должны работать одинаково и поддерж...

вы хотите в лайве на страницу пихать то новое, что подходит под фильтр? оо

Андрей- Автор вопроса

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
61
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
Привет всем. Не знаю, удачный ли чатик я выбрал для вопроса, но он как будто в целом про концепцию фп и конкретно про Haskell. Прочитал, что в целом в мире фп нет идеи мутабел...
Gellert Cringewald
15
Как добавить ссылку в Быстрый доступ в Проводнике windows 10? Нашёл, как на power shell сделать, но может есть способ через Дельфи?
А
31
@helgispbru @Dreamer_0x01 @Pathologic93 @webber_12 Не уверен, что вам всем это жутко интересно, но в продолжение недавнего диалога отправлю свои наброски. Хочу понять, правил...
Андрей [aharito] Харитонов
13
Карта сайта