Así que he estado trabajando en un simple AppleScript para tratar de ayudar con la gestión de mi correo electrónico en Mail de OS X, y lo tengo aparentemente funcionando muy bien con un problema importante; el rendimiento de la script es horrible.
Ahora, sé que AppleScript no es siempre el lenguaje de scripting más rápido, pero no estoy seguro de por qué el rendimiento es tan malo como es. Aún más extraño, ¡el tiempo necesario para completar cada operación en un bucle parece aumentar con el tiempo! Por ejemplo, mi script debería coincidir con unos 300 correos electrónicos (procesados a partir de una lista que suma unos 500), después de cinco minutos coincidirá con unos 100 correos, pero después de veinte sólo habrá coincidido con unos 125, habiéndose ralentizado hasta el punto de que tarda casi un minuto en procesar cada correo, y sigue empeorando hasta que el script termina finalmente después de unas tres horas.
Aquí tienes una versión simplificada del script:
set ignoreTheseMailboxes to { "Inbox", "Drafts", "Junk", "Sent", "Trash" }
set expiryDate to (current date) - (45 * days) as date
set myLogFile to open for access POSIX file "/Users/username/Desktop/test.log" with write permission
tell application "Mail"
set theAccounts to every account
repeat with eachAccount in theAccounts
set theMailboxes to mailboxes in eachAccount
write name of eachAccount & return to myLogFile
repeat with eachMailbox in theMailboxes
if (ignoreTheseMailboxes does not contain (name of eachMailbox) then
write " " & name of eachMailbox & return to myLogFile
set theMessages to messages in eachMailbox
repeat with eachMessage in theMessages
if date received of eachMessage <= expiryDate then
write " " & subject of eachMessage & return to myLogFile
end if
end repeat
end if
end repeat
end repeat
end tell
close myLogFile
Tendrás que perdonar cualquier error tipográfico que haya podido cometer, pero lo anterior es el comportamiento básico del script, y muestra el mismo problema cuando se ejecuta en las mismas cuentas de correo y mensajes.
Lo que me gustaría saber es, ¿cuál es la razón por la que un script como este experimentaría ralentizaciones crecientes, y hay alguna forma de optimizarlo para evitar este tipo de problemas?
Es una pena que no podamos ver carpetas inteligentes en Mail, ya que podría reducir significativamente el número de mensajes que hay que buscar (y evitar la necesidad de probarlos).
[editar] Además, debo señalar que durante la operación del proceso que ejecuta el script se arrastrará rápidamente hasta el 100% de uso de la CPU, por lo que AppleScript está definitivamente haciendo algo Pero no sé qué.