Какие есть способы временного кэширования данных на клиенте?
Задача какая:
Есть два сайта: siteA и siteB. Посетитель открывает пост на siteA. Теперь мне нужно найти связанный с ним пост на siteB. Для этого я беру siteA-post-id и через API получаю siteB-post-id. Так как связанные посты почти никогда не меняются, логично сохранить где-нибудь на клиенте пару siteA-post-id = siteB-post-id. Но проблема в том, что они, с маленькой вероятностью, но помяняться могут. Так что нужно сохранять эту пару на клиенте, но как-то её перепроверять или просто кэшировать на время.
Сейчас сохраняется в sessionStorage. Но так данные сохраняются на очень коротки срок. А я бы хотел сохранять на 5-10 дней. Единственным вариантом который я придумал, это делать записи в localStorage но с меткой времени. И при получении такий записи проверять как давно она было сделана.
Но, может есть способ полутше, о котором я не знаю. Так же было бы замеательно, если бы пользователь, удаляя кэш из меню браузера, так же удалял и мои сохраненные данные.
Зачем вам связь хранить на клиенте? пусть этим сервер заморачивается, у него больше возможностей для этого.
1 запрос - 1 ответ, значит можно выдавать связанный идентификатор siteB при каждом запросе с siteA
Alex
@Kozack Автор вопроса, куратор тега JavaScript
Как раз для того, чтобы когда пользователь снова заходить на siteA, не было необходимости обращаться к серверу и запрашивать siteB-post-id. Чтобы он уже был на клиенте и отработал мнгновенно.
так у вас есть еще какой то siteX? потому что в идеологии веб текущая страница должен быть какой то сайт, вот пусть он и рулит связями.
У вас запрос 1 id не мгновенный? Вы не можете его совместить с загрузкой страницы?
Написано
Alex
@Kozack Автор вопроса, куратор тега JavaScript
rPman, Нет, не могу. Как я и написал — два разных сайта, со своими серверами и логикой. При загрузке страницы на одном, скрипт должен найти связанную запись на другом. Это выполняется асинхронно, на клиенте, посредством fetch к API второго сайта.
Тогда чтобы оптимизировать, нужна логика, по которой эти связи id меняются
если вам 1 запрос на сервер это не мгновенно, ничего сделать нельзя, один запрос делать все равно придется (либо на валидацию кеша либо на запрос самих данных)
Написано
Alex
@Kozack Автор вопроса, куратор тега JavaScript
rPman, Ну так вот сейчас как: проверяется sessionStorage. Если сохраненного результата нет — выполнить запрос и сохранить. Суть моего вопроса в том "Есть ли альтернатива sessionStorage, чтобы сохранять резульаты на более длительный срок?"
Вы можете возвращать не 1 значение при запросе, а все последние изменения, обновляя локальный кеш так чтобы последующие запросы были в кеш гарантированно.
Попробуйте посмотреть в сторону ServiceWorkers , а точнее в API фоновой синхронизации. Возможно потребуется 2 воркера, которые как-то будут общаться через Storage Local, IndexDb или Cookie, в чем должен помочь https://github.com/zendesk/cross-storage.