Лучший способ сохранить статус динамического веб-интерфейса
В основном на моем сайте у меня есть боковая панель со стеком ящиков; каждый блок может быть свернут или расширен пользователем. Мне нужно сохранить статус каждого поля для текущего пользователя. Я не хочу использовать куки, потому что если пользователь меняет браузер или компьютер, все ящики перейдут в состояние по умолчанию.
Должен ли я сохранять эту информацию в базе данных, делая запрос каждый раз, когда пользователь сворачивает / разворачивает окно? Как бы вы справились с этим? Благодарю.
Редактировать: Что, если пользователь нажимает на кнопку переключения несколько раз, например, десять раз за две секунды, просто потому, что ему нравится анимация блоков? Он сделает десять запросов за две секунды. Таким образом, возможно, вопрос должен быть: когда я должен сохранить эти данные?
2 ответа
Вызывайте (измененную) (на стороне клиента) функцию каждый раз, когда изменяется ящик.
Сохраните два элемента (на стороне клиента): время отправки последнего обновления на сервер и установлен ли таймер.
Напишите (на стороне клиента) функцию "update", которая отправляет обновление и обновляет состояние, чтобы отметить, что последнее обновление было только сейчас.
Когда вызывается измененная функция: если установлен таймер, немедленно вернитесь; если обновление никогда не отправлялось или последнее обновление было отправлено более десяти секунд назад, вызовите функцию обновления и вернитесь. В противном случае установите таймер для отправки обновления через десять секунд.
Обратный вызов таймера должен просто очистить флаг таймера и вызвать функцию обновления.
Также при событии выгрузки проверьте, был ли установлен таймер и был ли он очищен, и вызовите функцию обратного вызова таймера.
Таким образом, результатом является то, что вы отправляете обновление немедленно, кроме случаев, когда пользователь машет рукой, и в этом случае вы отправляете обновление не чаще, чем каждые десять секунд.
В некоторых случаях вы можете потерять обновление, но это может произойти только в том случае, если пользователь играл с переключателем, а затем закрывал страницу до срабатывания таймера, и в этом случае он, вероятно, не заметит.
Если вам необходимо сохранить эти параметры на нескольких компьютерах, вам понадобится хранилище на стороне сервера.
Это может быть база данных или простой файл. Выбор зависит от того, что у вас есть, набора навыков и необходимости масштабирования. Если у вас будет всего несколько пользователей, лучшим выбором может быть плоский файл.