Ralentización exponencial de AppleScript

2

Así que he estado trabajando en un simple AppleScript para tratar de ayudar a administrar mi correo electrónico en el Correo de OS X, y parece que funciona bien con un problema importante; el rendimiento del script es horrible.

Ahora, sé que AppleScript no siempre es 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, ¡la duración del tiempo para completar cada operación en un bucle parece aumentar con el tiempo! Por ejemplo, mi script debe coincidir con unos 300 correos electrónicos (procesados de una lista que totaliza alrededor de 500), después de cinco minutos coincidirá con alrededor de 100 correos electrónicos, pero después de veinte solo habrá coincidido con unos 125, habiendo disminuido la velocidad hasta indica que se tarda casi un minuto en procesar cada correo electrónico y continúa empeorando hasta que el script termina finalmente después de aproximadamente tres horas.

Aquí hay 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 de mi parte para adelgazar, pero lo anterior es el comportamiento básico de la secuencia de comandos y muestra el mismo problema cuando se ejecuta en las mismas cuentas y mensajes de correo electrónico.

Lo que me gustaría saber es, ¿cuál es la razón por la que una secuencia de comandos como esta experimentaría ralentizaciones cada vez mayores y existe una manera de optimizarla para evitar este tipo de problemas?

Es simplemente desafortunado que no podamos ver las carpetas inteligentes en Mail, ya que podría reducir significativamente la cantidad de mensajes que necesitan ser buscados (y evitar la necesidad de probarlos).

[editar] Además, debo tener en cuenta que durante la operación, el proceso de ejecución del script aumentará rápidamente al 100% del uso de la CPU, por lo que AppleScript definitivamente está haciendo algo , ¡simplemente no puedo entender qué!

    
pregunta Haravikk 14.07.2014 - 19:13

1 respuesta

1

Parece que el problema no es con AppleScript, sino con Script Editor, después de confirmarlo con un ingeniero de Apple. Todavía no estoy convencido de por qué este debería ser el caso, pero el script se ejecuta mucho mejor cuando se ejecuta a través de osascript , especialmente después de refactorizarlo para usar una instrucción whose al buscar mensajes, en lugar de iterar sobre ellos con una condición if .

    
respondido por el Haravikk 02.08.2014 - 18:15

Lea otras preguntas en las etiquetas