0

Имейте сайт на основе PHP/mySQL/JS-JQuery, который записывает время окончания для гонщиков, а затем отправляет время назад на сервер. Сервер вставляет время окончания в db, вычисляет конечное место на основе формулы гандикапа. Сохраняет это и отправляет финишное место обратно на веб-страницу, и оно обновляется на экране. Он использует вызовы Jquery Ajax, поэтому страница вообще не перезагружается. Все работает нормально, если соединение данных хорошее.Веб-приложение в Flaky Подключение к Интернету

Если соединение с данными плох, моя первая версия этой страницы сообщит, что соединение было плохим. Теперь я пытаюсь сделать это немного умнее, поэтому я начал с функции HTML5, которая сообщает браузеру, что он включен или отключен (я понимаю, что это может быть не лучший способ, но он работает для тестирования концепции) Когда новое время окончания записи (или обновление), и мы в автономном режиме, JS просто добавляет класс notSent к тегу времени окончания. Место финиша и все конечные места, как правило, поступают из севера, выделены серым цветом, что указывает на то, что данные больше не действительны (пока он не сможет связаться с сервером).

Когда браузер снова оказывается в сети, простой цикл jQuery для каждого класса notSent запускает повторную отправку запросов AJAX, и если все они будут завершены, он обрабатывает информацию о возврате и отображает ее как актуальную.

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

Итак, моя последняя проблема - это перезагрузка и закрытие кнопок браузеров, если пользователь нажимает их, когда он находится в автономном режиме, они потеряют экран ввода данных и не повезет до тех пор, пока соединение не вернется. Могу ли я также отключить эти функции? Быстрый поиск Stack-overflow показывает, что это можно сделать, но большинство ответов дают старое, «вы действительно не должны этого делать, и если вам кажется, что вам нужно, вы должны переосмыслить свой дизайн». предупреждение.

Так переосмыслив мой дизайн, я начинаю узнавать;

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

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

Нижняя линия - я что-то упустил? Есть ли простое решение?

ответ

0

Я думаю, что лучший вариант - использовать PouchDB для синхронизации между клиентом и сервером и использовать Background Sync, чтобы пробудить Рабочего Работника, когда вы восстановите соединение. Если Service Worker отсутствует в вашем браузере, он может синхронизироваться при следующем открытии браузера.

У вас есть аналогичные example of deferred requests, описанные в Поваренной книге рабочего стола,

Смежные вопросы