Могу ли я заставить Siesta просмотреть свой постоянный кеш перед отправкой сетевого запроса?

Я начал использовать Siesta во время работы в фоновом режиме, используя возможности фоновой загрузки Apple. Одна из (многих) трудностей, с которыми приходится работать при работе таким образом, заключается в том, что на некоторых устройствах ОС часто убивает мой процесс. Я стараюсь, чтобы моя обработка была быстрой и максимально эффективной, чтобы операционная система работала с ней регулярно.

Насколько я понимаю, если у Siesta нет данных в кеше в памяти (что имеет место, если приложение только что запущено), то она выполняет как сетевой запрос, так и запрос постоянного кеша. В этом сценарии у меня часто бывают совершенно хорошие, не устаревшие данные в постоянном кэше. Могу ли я заставить Siesta предварительно загрузить эти данные в кэш в памяти, прежде чем он сделает сетевой запрос? Тогда мой код использует меньше батареи, он запускается регулярно, все отлично!

1 ответ

Как это случилось, я просто решил эту проблему, работая над расфасованным FileCache реализация для сиесты. Я думаю, что это справедливо назвать ошибкой.

Когда вы впервые вводите ресурс в память, Siesta запускает проверку кэша асинхронно. Так и должно быть - мы не хотим, чтобы дорогая загрузка данных поддерживала поток пользовательского интерфейса, - но loadIfNeeded() не ждет завершения проверки кэша.

Улучшенный дизайн будет иметь loadIfNeeded() еще вернуть Request если данных еще нет, но этот запрос должен быть цепочечным, который сначала проверяет кэш, а затем проверяет сеть.

В то же время, (очень уродливый) обходной путь для этого состоит в том, чтобы отложить loadIfNeeded() вызов:

let resource = service.resource("whatever")
DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
  resource.loadIfNeeded()
}

Обновление: я подал проблему для этого.

Другие вопросы по тегам