Nel mio post precedente del blog sui dati di iTunes, ho mostrato un semplice programma JMP Scripting Language (JSL) per analizzare il file XML di iTunes. Ho chiuso il post chiedendomi se il codice avrebbe funzionato bene sul mio intero file Library.xml di iTunes da 13.3MB.
Il programma JSL è stato eseguito in meno di un secondo sul mio file di test da 7 KB. Quanto tempo ci è voluto per l'intero 13.3 MB? Ci sono voluti ben 90 secondi. Dove è stato speso il tempo? La risposta a questo è l'obiettivo di questo post, che è la seconda parte di una serie sul mio progetto di raccolta di dati di iTunes.
Come posso migliorare facilmente le prestazioni del mio script?
Prima JMP 11, questa non era una domanda facile a cui rispondere. JMP 11 ha presentato il JSL Profiler . Questo è un ottimo strumento per valutare dove un programma JSL trascorre del tempo su base riga-per-riga.
Per utilizzare il JSL Profiler, ho fatto clic sull'icona "Debug Script" nella parte superiore dell'editor JSL, quindi ho fatto clic sull'icona "timer" per mettere il debugger in modalità profiler. L'esecuzione del mio script sul file completo da 13.3 MB ha mostrato che il codice passava tutto il suo tempo nella riga Parse XML, che include il comando Aggiungi riga (). La mia ipotesi è che la maggior parte del tempo venga spesa per aggiornare lo stato della tabella.

Il report del JSL Profiler in JMP
Mi sono reso conto che potevo aggiungere un messaggio JSL alla tabella dati per bloccare tutti i messaggi di aggiornamento. Il messaggio è:
dt << Inizia l'aggiornamento dei dati;
Alla fine della tabella dati che elabora il messaggio, dovrei aggiungere questo:
dt << Termina l'aggiornamento dei dati;
Dopo aver aggiunto questi messaggi, il programma impiega circa 13 secondi per essere eseguito, anziché 90 secondi: una riduzione dell'85 percento dei tempi di elaborazione!
Ora ho bisogno di ripulire alcuni dei dati che non desidero per la mia analisi. I miei dati contengono molti record che dettagliano le tracce che fanno parte delle playlist. Devo aggiungere del codice al mio JSL per non elaborare i tag che contengono i dati della playlist. Nei miei dati, questo era circa il 10 percento del totale.

Dati della playlist iTunes
Grazie allo sviluppatore JMP Michael Hecht per suggerire il seguente codice che ho aggiunto al JSL. Ora tutti i tag "chiave" che avevano "Playlist" come valori di testo non sono stati elaborati come dati.
OnElement (
"chiave",
Tag di fine (
txt = XML Text ();
Se(
tag di processo,
Se(
txt == "Playlist", tag di processo = 0,
Manca (Num (txt)),
dt grezzo << Aggiungi righe (1);
dt raw: Key [Row ()] = txt;
),
txt == "Tracce", tag di processo = 1
);
)
)
Puoi scaricare il mio Programma JSL da JMP File Exchange e analizza i tuoi dati di iTunes. (Il download richiede un download gratuito Community utente JMP account.)
Salverò l'analisi completa dei dati per il mio ultimo post, ma ti darò un'anteprima. Di seguito una mappa dei tre che mostra il mio ascolto per genere e artista. Adoro Bruce Springsteen e ho "costretto" i miei figli ad ascoltarlo molto negli anni, portandoli anche a molti concerti dal vivo. Amo anche l'opera, il jazz e il blues. Come puoi vedere, adoro la musica.

Treemap di Play Count per genere e artista che utilizza la piattaforma Treemap JMP.