LINUX.ORG.RU

Как лучше синхронизировать 3 мегабайта?

 , , ,


0

1

Здравствуйте. Хочу спросить, как бы вы решили такую задачку

Допустим есть условный магазин конфет. Всего пара тысяч наименований, которые, вместе с описанием и прочей метаинформацией умещаются в 3Мб «слепок» условного JSON-а.

Допустим есть сайт этого магазина. При его первом посещении в фоне загружаются эти 3Мб и складываются в localStorage для того, чтобы поиск по конфетам был максимально быстрым и отзывчивым. А так-же для того, чтобы при следующем посещении ничего не качать.

И все прекрасно работает ровно до того момента, пока что-то не изменится в конфетной базе: изменится цена, название, добавятся новые конфеты, удалятся старые итд. Что происходит довольно часто. «слепок» в localStorage быстро утрачивает свою актуальность и каждый раз приходится качать новый.

Максимум на что хватило полета моей фантазии, это разбить «слепок» на несколько поменьше, и выкачивать только измеившиеся части. Но может быть есть решение эффективнее? В идеале, докачка только изменений

Как бы вы реализовали нечто подобное?

Deleted
Ответ на: комментарий от Harald

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

Deleted
()
Ответ на: комментарий от Harald

Справедливости ради, анимированная открытка «с масленницей», которую бабуля прислала мне на ватсап, занимает больше места и на веки-вечные сохраняется в кэше телефона. Так что 3 мб не повод гундеть )

Deleted
()

для каждого item иметь временную метку как id, при подключении юзера слать ему запрашивать у него список этих id по порядку item’ов типа id=632:8887,763:8887,989:8869 если есть старые высылать ему список вида id_old=8887 id_new=8888 item=632 data_1="price=999$" data2="name="кокосовая канФеткО"" data3="company="сосикакос"" клиент берёт и меняет для item=632 временную метку на id_new=8888 и обновляет данные в соотвецтвии ему. Короче сначала просто от сервера список пар item:time для всего если на строне пользователя всё совпадёт он просто проигнорирует, если нет то запросит обновление для того что не совпало по этим же ключам, а если чего то нет то тоже запросит. Быстро удобно жрать не просит, трафик не жрёт.

Ну то есть запрос на обновление от клиента это просто ответ с диффом ключей того что не совпало и не нашлось.

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

И да, я никогда так не делал, я не вебмака…девАлаПёр и всё только что на ходу придумал.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 4)

Ввести сквозную нумерацию версий слепка. На сервере хранить несколько дельт: разница текущей версии N с версией N-1, N-2, N-3 и так далее. Клиент при открытии сайта спрашивает: «у меня версия K, есть обновления?», на что сервер отвечает либо дельтой либо полным слепком. Клиент применяет дельту или выкачивает полную базу, запоминает текущую версию.

i-rinat ★★★★★
()
Ответ на: комментарий от Harald

Ну, если умудришься, чё там колобок да палочка и ещё куда то круг надо пришпандоривать. Боюсь с крестом у получится просто велосипедное колёсико :D

Deleted
()
Ответ на: комментарий от dk-

dk- ☆ (15.03.2019 1:14:27) «Его сразу от ЛЭП стоит» сказал он про меня

Я тебя боюс, мадаратары абезапасе меня от него

Deleted
()
Ответ на: комментарий от dk-

Контекст буквальный, ты и твой друган, угрожали мне расправой через пропускание напряжения ЛЭП сквозь мои жиры! апасная белка

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

https://github.com/gritzko/swarm ? Не знаю как насчет актуальности софта, но теория от этих авторов довольно познавательная.

Vit ★★★★★
()
Ответ на: комментарий от Deleted

ахахах, фууу ненее, то я с альфой бы хотя бы то бы ладно бы :D

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

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

Stanson ★★★★★
()

При его первом посещении в фоне загружаются эти 3Мб и складываются в localStorage для того, чтобы поиск по конфетам был максимально быстрым и отзывчивым.

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

*чушь грабли и костыли*
Но может быть есть решение эффективнее?

сделай по нормальному просто и всё

Noob_Linux ★★★★
()

Загзипованные 3Мб это сколько, килобайт 300?
Забей

zolden ★★★★★
()

клаcсический велосипед - упрощенная система контроля версий
локальный json имеет счетчик версии или дату обновления (к примеру «год»-«день в году»). страничка сравнивает локальный счетчик с серверным, если есть отличия, то закачивает последовательный набор диффов чтобы сравнять счетчики.
раз в кучу времени json перекачивается полностью.

pfg ★★★★★
()
Ответ на: комментарий от nev3rfail

Я бы навернул вебсокет

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

Deleted
()

ты не pouchdb ищешь?

moot ★★★★
()
Ответ на: комментарий от Noob_Linux

При этом если делать отзывчивый поиск «по старинке» с хорошим кешем то как бы будет одинаково моментально (+- 200 мс как бы большинство даже не почувствуют, вау эффекта не будет), разве что

офлайн не будет работать (а это и не нужно).

Удваиваю. Не надо в фоне мне там качать 3мб непонятного мусора.

anonymous
()
Ответ на: комментарий от Stanson

вебворкер, который будет даже при закрытой странице магазина постоянно проверять

А вот скажите, пожалуйста — как обезопасить себя от подобных блдж «технологий»? Вот если я категорически против того, чтобы подобная йоолупукка творилась в бекграунде? Есть ли методы?

Borifed
()
Ответ на: комментарий от Borifed

А вот скажите, пожалуйста — как обезопасить себя от подобных блдж «технологий»? Вот если я категорически против того, чтобы подобная йоолупукка творилась в бекграунде? Есть ли методы?

Ну, пока что, по крайней мере в фаерфоксе это лютое дерьмище ещё можно отключить и оно действительно не будет работать. Не факт, что это можно будет сделать завтра. А вот долбаный ублюдочный LocalStorage уже, похоже никак не отключить.

Поэтому, похоже что единственный гарантированный способ получить когда-нибудь контроль над тем, что делает браузер, это пилить альтернативу «меинстримному» браузерному блоатваре. Возможно что-то можно из NetSurf или там старой версии WebKit рано или поздно сделать...

Stanson ★★★★★
()
Ответ на: комментарий от Deleted

Возьми ElasticSearch, гоняй запросы по вебсокету, будут примерно такие же результаты на объёме данных того же условного магазина конфет.

theNamelessOne ★★★★★
()

качай только изменения, в чем проблема то?

Int0l ★★
()
Последнее исправление: Int0l (всего исправлений: 1)

умещаются в 3Мб «слепок» условного JSON-а.

это какой то… позор.jpg

anonymous
()

Значит так. Добавь в свой json инкрементальную версию (таймстемп тоже сойдет). При каждом открытии страницы посылай запрос на бекенд с текущей версией из твоего локалстораджа. А бекенд пусть отдает JSONPatch с изменениями с того момента. Всё.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.