Nuestra aplicación debe mostrar una gran cantidad de datos con un mínimo de solicitudes HTTP remotas, por lo que hemos agregado un punto final a nuestro back-end que proporciona todos los datos necesarios como una única respuesta json. Esto resulta en ~ 1.5MB (comprimido) o aproximadamente 8 MB de texto json sin formato.¿Cuál es la forma más eficiente de convertir una respuesta JSON de 10 MB en un NSDictionary?
No hay mucho problema, se descarga en 10-30 segundos y estamos utilizando ASIHTTPRequest para escribir toda la respuesta al disco.
Ahora viene la parte divertida: después de leer el archivo descomprimido en una cadena mapeada en la memoria, usamos el json-framework de stig para convertirlo en un NSDictionary. Esto ha funcionado muy bien para el resto de nuestra aplicación y la típica respuesta JSON de 2 KB para el resto de nuestros puntos finales API. Sin embargo, la deserialización de estos 8 MB de datos lleva de un par de segundos (simulador) a minutos (3G y iPod touch de 2da generación).
Estoy investigando el mejor enfoque para leer en todos estos datos.
Me encantaría utilizar listas binarias servidas directamente desde el servidor, pero estamos usando Java y no he encontrado una biblioteca adecuada que cumpla con nuestros requisitos, y con un plazo tan ajustado, escribir la nuestra podría no ser la mejor idea
Si ayuda de ninguna manera, la cadena JSON que está analizando es sobre todo una serie de X artículos, así:
{
"items": [ { "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" }
]
}
¿Cuál es el método más eficiente para leer en este 8 MB formato JSON cadena en un NSDictionary en la memoria?
¿Puede dividirlo en archivos más pequeños y leer cada uno en la demanda? ¿O * necesitas * todos los 8 MB a la vez? – JoePasq
Tengo que ir con: egads. ¿Cómo se pueden visualizar 8MB de texto en una pantalla tan pequeña? Me iré, es probable que haya otro enfoque que sea más eficiente. – joshpaul
No se muestra todo a la vez. Es una guía de programación de TV interactiva, dividida en bloques de una hora con 900 canales cada uno. Entonces son ~ 7 * 24 vistas de tabla secuenciales, cada una con> 900 programas. El usuario puede necesitar solo las primeras 4 horas más o menos en este momento, pero el requisito es que debe poder recuperar cualquiera de los otros días/horas sin pausa. Inicialmente, solo descargaba 4 horas de datos a la vez, pero el código que mantenía un registro de los que estaban disponibles en Core Data y que era necesario descargar aún, era demasiado complejo de mantener, por lo que optamos por descargar todos los datos en un pase. –