[Xamarin] Cache de datos de forma sencilla con Monkey Cache

La importancia de la optimización

Cuando desarrollamos aplicaciones móviles, siempre tenemos en cuenta el dispositivo final donde se va a ejecutar, es decir, las optimizaciones a diferentes niveles se encuentran a la orden del día. Hablamos de opciones como cachear imágenes, reutilizar celdas en listados o compilar el XAML entre una infinidad de opciones.

Por otro lado, la mayoría de aplicaciones necesitan guardar datos como caché para optimizar arranques o bien, para evitar volver a realizar peticiones HTTP innecesarias. En este artículo, vamos a conocer y a utilizar Monkey Cache de James Montemagno.

Cachear datos

Mientras que tenemos diferentes opciones para cachear imágenes, cachear información es algo donde hay diversidad de opciones. A continuación, vamos a conocer Monkey Cache, una forma sencilla y potente de cachear información durante un periodo de duración concreto.

Monkey Cache

Monkey Cache tiene como objetivo permitir cachear información de forma sencilla, sin requerir gran cantidad de dependencias controlando el tiempo de caducidad de los datos. Es importante resaltar que la librería no tiene como objetivo gestionar peticiones HTTP, esstados, etc. tan solo cachear la información.

Estamos ante una librería NET Standard 2.0 con el siguiente soporte a plataformas:

Platforma Versión
Xamarin.iOS iOS 7+
Xamarin.Mac All
Xamarin.Android API 14+
Windows 10 UWP 10.0.16299+
.NET Core 2.0+
ASP.NET Core 2.0+
.NET 4.6.1+

Utilizando Monkey Cache

Vamos a utilizar la aplicación WeatherApp para controlar las diferentes peticiones a la API de OpenWeatherMap.org.

Comenzamos añadiendo los paquetes NuGet necesarios. Monkey Cache cuenta con diferentes implementaciones como SQLite, LiteDB o FilesStore.

En nuestro ejemplo, vamos a utilizar la opción más sencilla (y con menos dependencias), FileStore.

MonkeyCache NuGet

Tras contar con los paquetes necesarios, continuamos creando un identificador de aplicación utilizando la propiedad ApplicationId, que se encargará de crear una carpeta específica para la aplicación en disco:

Barrel.ApplicationId = "com.refractored.weatherappmonkeycache";

Veamos como utilizar Monkey Cache.

if (!Barrel.Current.IsExpired(key: location))
{
     weatherRoot = Barrel.Current.Get<WeatherRoot>(key: location);
     Forecast = Barrel.Current.Get<WeatherForecastRoot>(key: weatherRoot.CityId.ToString());
}
else
{
     weatherRoot = await WeatherService.Instance.GetWeatherAsync(location);
     Barrel.Current.Add(key: location, data: weatherRoot, expireIn: TimeSpan.FromHours(1));
     Forecast = await WeatherService.Instance.GetForecast(weatherRoot.CityId);
     Barrel.Current.Add(key: weatherRoot.CityId.ToString(), data: Forecast, expireIn: TimeSpan.FromHours(1));
}

La aplicación verificará si los datos han expirado o no. En caso de expirar o no existir, realiza la petición HTTP. Al realizar la petición HTTP, añadimos en cache los datos durante 1 hora (expireIn).  Si los datos no han expirado, utilizamos los datos cacheados evitando realizar la petición HTTP.

Sencillo, ¿verdad?.

NOTA: Es posible hacer estas llamadas genéricas para reutilizar en diferentes servicios.

La librería conservará datos a menos que indiquemos que deseamos borrarlos. Podemos borrar todos los datos:

Barrel.Current.EmptyAll();

O podemos eliminar todos los datos expirados:

Barrel.Current.EmptyExpired();

 

WeatherAppMonkeyCache

Tienes el código fuente del ejemplo disponible GitHub:

Ver GitHub

Me he quedado con dudas…

El uso de la librería es sencillo, pero…¿diferencias con Akavache?. Akavache ofrece persistencia en forma de clave-valor con un rendimiento muy alto utilizando SQLite y Reactive Extensions. Monkey Cache busca simplificar uso, gestión de la expiración y dependencias.

Más información

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *