En mi entrada de blog anterior Acerca de los datos de iTunes, mostré un sencillo programa JMP Scripting Language (JSL) para analizar el archivo XML de iTunes. Terminé la publicación preguntándome si el código funcionaría bien en mi archivo completo de 13.3MB iTunes Library.xml.
El programa JSL se ejecutó en menos de un segundo en mi archivo de prueba de 7KB. ¿Cuánto tiempo tomó la totalidad de los 13.3MB? Tomó 90 segundos completos. ¿Dónde se estaba gastando el tiempo? La respuesta a eso es el enfoque de esta publicación, que es la segunda parte de una serie sobre mi proyecto que recopila datos de iTunes.
¿Cómo puedo mejorar fácilmente el rendimiento de mi script?
antes de JMP 11, esta no fue una pregunta fácil de responder. JMP 11 introdujo el Perfilador JSL . Esta es una gran herramienta para evaluar dónde un programa JSL está gastando tiempo línea por línea.
Para usar el JSL Profiler, hice clic en el ícono "Debug Script" en la parte superior del editor JSL, y luego hice clic en el ícono "timer" para poner al depurador en el modo de generador de perfiles. La ejecución de mi script en el archivo completo de 13.3MB mostró que el código pasó todo su tiempo en la línea Parse XML, que incluye el comando Agregar fila (). Mi conjetura es que la mayor parte del tiempo se pasa actualizando el estado de la tabla.

El informe de perfiles de JSL en JMP
Me di cuenta de que podía agregar un mensaje JSL a la tabla de datos para evitar todos los mensajes de actualización. El mensaje es:
dt << Comenzar actualización de datos;
Al final de la tabla de datos que procesa el mensaje, necesitaría agregar esto:
dt << Fin de actualización de datos;
Después de agregar estos mensajes, el programa tardó solo 13 segundos en ejecutarse, en lugar de 90 segundos, ¡una reducción del 85 por ciento en el tiempo de procesamiento!
Ahora necesito limpiar algunos de los datos que no deseo para mi análisis. Mis datos tienen muchos registros que detallan qué pistas forman parte de las listas de reproducción. Necesito agregar algo de código a mi JSL para no procesar etiquetas que contengan datos de listas de reproducción. En mis datos, esto fue alrededor del 10 por ciento del total.

Datos de la lista de reproducción de iTunes
Gracias al desarrollador JMP Michael Hecht por sugerir el siguiente código que agregué a la JSL. Ahora, las etiquetas "clave" que tenían "Lista de reproducción" como valores de texto no se procesaron como datos.
OnElement (
"llave",
Etiqueta final
txt = Texto XML ();
Si(
etiqueta de proceso,
Si(
txt == "Listas de reproducción", etiqueta de proceso = 0,
Falta (Num (txt)),
raw dt << Add Rows (1);
raw dt: Key [Row ()] = txt;
)
txt == "Tracks", tag de proceso = 1
);
)
)
Puedes descargar mi Programa de JSL desde JMP File Exchange e investiga tus propios datos de iTunes. (Descargar requiere un libre Comunidad de usuarios de JMP cuenta.)
Guardaré el análisis completo de los datos de mi última publicación, pero le daré una vista previa. A continuación se muestra un Treemap que muestra mi escucha por género y artista. Amo a Bruce Springsteen y he "obligado" a mis hijos a escucharlo mucho a lo largo de los años, incluso llevándolos a muchos conciertos en vivo. También me encanta la ópera, el jazz y el blues. Como puedes ver, me encanta la música.

Treemap de Play Count por género y artista utilizando la plataforma JMP Treemap.