Кеш — це не просто спосіб зробити застосунок швидшим
Коли Booka Radio вже один раз отримав список жанрів або авторів, немає сенсу запитувати той самий набір даних при кожному відкритті екрана. Якщо за останню хвилину нічого не змінилося, повторний мережевий запит лише додає затримку й навантаження.
Кеш дозволяє тимчасово використовувати вже отриману відповідь. Екран відкривається швидше, а застосунок менше залежить від якості мережі. Але корисний кеш починається не з питання «що можна зберегти», а з іншого — «скільки часу цим даним можна довіряти».
Жанри та автори змінюються повільно
Список жанрів не оновлюється щосекунди. Навіть якщо редакція додала нову категорію, користувач навряд чи постраждає, якщо побачить її не миттєво, а після наступного оновлення кешу. Те саме стосується списку авторів.
Тому такі довідкові дані в Booka Radio можна зберігати довше. Це хороший приклад інформації, де невелика затримка актуальності майже непомітна, зате швидкість відкриття екранів покращується при кожному повторному вході.
Каталог книг змінюється частіше, але теж не кожну секунду
У каталозі можуть з'являтися нові книги, змінюватися обкладинки або описи. Тут уже важливо оновлювати дані частіше, ніж жанри, але робити запит на сервер після кожного руху між екранами все одно зайве.
Тому для різних типів даних ми використовуємо різний термін життя кешу. Це дозволяє балансувати між двома крайнощами: завжди показувати повільну, але абсолютно свіжу відповідь або миттєво відкривати інформацію, яка вже встигла застаріти.
Термін життя кешу — це продуктове рішення, а не випадкове число
Якщо дані зберігати надто довго, користувач бачить застарілий каталог. Якщо очищати кеш надто швидко, перевага майже зникає і застосунок знову залежить від мережі при кожному відкритті. Тому різні відповіді потребують різних часових меж.
У Booka Radio ми можемо дозволити довший кеш для довідників і коротший для списку книг. Такий підхід відображає реальну швидкість змін: структура жанрів стабільніша, ніж перелік актуальних релізів. Кеш має повторювати поведінку даних, а не підганяти всі дані під одне універсальне правило.
Статус профілю — інша категорія даних
Профіль може містити інформацію, яка безпосередньо впливає на доступ: активний Premium, поточний статус користувача, останнє прослуховування та інші персональні значення. Якщо такий екран показує старий кеш, наслідки вже помітні.
Наприклад, людина щойно придбала підписку, а застосунок продовжує показувати старий безкоштовний статус лише тому, що кілька годин тому зберіг попередню відповідь. Або навпаки — підписка вже завершилася, а локальний кеш усе ще вважає її активною. Тут швидкість не може бути важливішою за правильність.
Саме тому профіль ми не кешуємо як звичайний каталог
Для Booka Radio актуальність персонального стану має вищий пріоритет. Коли застосунок запитує профіль, він повинен отримати свіжу відповідь від сервера, а не випадкову копію з попередньої сесії. Це особливо важливо після покупки, входу, виходу або синхронізації прогресу.
Такий підхід може означати додатковий мережевий запит, але тут він виправданий. Користувач краще зачекає частку секунди й побачить правильний статус, ніж миттєво отримає застарілу інформацію про власний доступ.
Кеш також допомагає при нестабільній мережі, але не повинен приховувати її
Якщо з'єднання короткочасно зникло, вже завантажений список жанрів або каталог може залишатися корисним. Людина все одно бачить знайомий інтерфейс і може орієнтуватися в доступному контенті. Для довідкової інформації це кращий результат, ніж порожній екран лише через тимчасовий збій мережі.
З персональними даними ми обережніші. Якщо свіжий статус критично важливий, застосунок не повинен удавати, що старе значення гарантовано актуальне. Кеш має покращувати досвід, але не створювати хибну впевненість там, де права доступу могли змінитися.
Правильний кеш — це різні правила для різних даних
Найпростіша реалізація кешу — встановити один час для всіх запитів. Але тоді або довідкові дані оновлюються надто часто, або персональні — надто рідко. У Booka Radio ми розділяємо ці сценарії: довідники можуть жити довше, каталог — менше, а профіль потребує свіжості.
Для користувача ця різниця майже невидима. Він просто помічає, що знайомі екрани відкриваються швидко, а важливі зміни на кшталт Premium відображаються без старих даних. Саме це й є метою кешування: не зберігати все якомога довше, а зберігати рівно настільки, наскільки це безпечно для конкретної інформації.
Помилка кешування часто виглядає як помилка самої підписки
Для користувача немає різниці, чому саме застосунок показує старий статус Premium: через неправильну перевірку платежу чи через застарілу відповідь у кеші. Він бачить лише одне — заплатив, а сервіс поводиться так, ніби нічого не сталося.
Саме тому кешування персональних даних потребує суворіших правил. У Booka Radio ми намагаємося не маскувати актуальний серверний стан старою локальною копією. Швидкий екран корисний лише тоді, коли інформації на ньому можна довіряти.