Могу ли я заставить 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()
}
Обновление: я подал проблему для этого.