J'ai donc travaillé sur un simple AppleScript pour essayer d'aider à la gestion de mon courrier électronique dans Mail d'OS X, et j'ai l'impression qu'il fonctionne très bien avec un problème majeur ; la performance du script est horrible.
Maintenant, je sais qu'AppleScript n'est pas toujours le langage de script le plus rapide, mais je ne sais pas pourquoi les performances sont aussi mauvaises. Plus étrange encore, le temps nécessaire pour effectuer chaque opération dans une boucle semble augmenter avec le temps ! Par exemple, mon script devrait correspondre à environ 300 courriels (traités à partir d'une liste totalisant environ 500), après cinq minutes, il correspondra à environ 100 courriels, mais après vingt, il n'en aura correspondu qu'environ 125, ayant ralenti au point de prendre près d'une minute pour traiter chaque courriel, et continue à empirer jusqu'à ce que le script finisse par se terminer après environ trois heures.
Voici une version simplifiée du 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
Vous devrez pardonner les éventuelles fautes de frappe dues au fait que j'ai réduit les choses, mais ce qui précède est le comportement de base du script, et présente le même problème lorsqu'il est exécuté sur les mêmes comptes de messagerie et messages.
Ce que j'aimerais savoir, c'est la raison pour laquelle un script comme celui-ci connaîtrait des ralentissements croissants, et y a-t-il un moyen de l'optimiser pour éviter ce genre de problèmes ?
Il est juste regrettable que nous ne puissions pas voir les dossiers intelligents dans Mail, car cela pourrait réduire considérablement le nombre de messages devant être recherchés (et éviter la nécessité de les tester).
[modifier] En outre, je dois noter que, pendant le fonctionnement, le processus exécutant le script grimpera rapidement à 100% d'utilisation du CPU, de sorte qu'AppleScript fait certainement quelque chose mais je ne sais pas quoi !