M1 Mac miniを使ってみて、「なーんかMacBook Pro Retina 2012とかわんねーなー」と感じていましたが、本当にそんな感じでした。
# 後日、詳細に検証したところM1 Mac+macOS 11.xではAppleScriptからのCocoa呼び出しが大幅に遅くなっていることが判明。処理性能重視のメインCPUコアではなく、省エネのサブCPUコアで実行されていることがわかり、これをAppleにレポートしてmacOS 12からはAppleScript+Cocoa呼び出しの処理速度が大幅に改善されました
Webブラウザの動作とかディスクI/Oなど、キビキビ動いて快適なのですが、AppleScriptを書いて動かしてみると……GUIアプリの操作は速い(Mac mini 2014比で2〜3倍速い)のですが、Cocoa Scriptingしていると速くなった感じがしません。
Xcode上でCocoa AppleScriptアプリケーションを書いて動かしてみると、冒頭のような感想になります。
机の上にマシンが5台ぐらい並んでおり、これらすべてでベンチマークを実施。体感速度を裏付ける結果が出ました。
# MacBook Air 2011のベンチマーク計測が抜けていました、、、、
上から3番目のマシンは仲間からの借り物の検証用マシンで、前主力環境のMacBook Pro Retina 2012とは別物で、HDDで動作しているマシンです。macOS 10.15の動作確認用マシンで、MacBook Pro Retina 2012よりも少しCPUが速いマシンでもあります。
なので、MacBook Pro Retina 2012をmacOS 10.15にアップデートすると、ほぼこれと同じ結果になるはずです(もったいなくてアップデートしませんが)。
macOS 10.14から10.15に移行したときに「全体的に速度が遅くなった」との証言をShane Stanleyからももらっています。
全体的な傾向として、「macOS 10.15で大幅な速度低下があり、その低下分をM1 Macのハードウェアとしての速さが穴埋めしている」という印象。macOS 10.15はBeta段階で「こんなのはダメ、使い物にならない」と判断し、パスして10.14を使い続けるという判断を行なっていました。
搭載メモリはM1 Mac miniとMac mini 2014が16GB、MacBook Pro 2012とMacBook Pro Retina 2012が8GBです。
AppleScript名:ASで1D Listをソート(1万件) |
use AppleScript version "2.7" use framework "Foundation" use scripting additions script spd property aList : {} property aRes : {} property bRes : {} end script set (aRes of spd) to {} set (bRes of spd) to {} –テスト用データリストの作成(1万アイテム) set (aList of spd) to {} repeat with i from 1 to 10000 set the end of (aList of spd) to (random number from 10000 to 99999) end repeat –昇順ソートの時間計測 set a1Dat to current application’s NSDate’s timeIntervalSinceReferenceDate() set (aRes of spd) to sort1DList_ascOrder_((aList of spd), true) set b1Dat to current application’s NSDate’s timeIntervalSinceReferenceDate() set c1Dat to b1Dat – a1Dat –降順ソートの時間計測 set a2Dat to current application’s NSDate’s timeIntervalSinceReferenceDate() set (bRes of spd) to sort1DList_ascOrder_((aList of spd), false) set b2Dat to current application’s NSDate’s timeIntervalSinceReferenceDate() set c2Dat to b2Dat – a2Dat return {c1Dat, c2Dat} –1D Listをsort / ascOrderがtrueだと昇順ソート、falseだと降順ソート on sort1DList:theList ascOrder:aBool set aDdesc to current application’s NSSortDescriptor’s sortDescriptorWithKey:"self" ascending:aBool selector:"compare:" set theArray to current application’s NSArray’s arrayWithArray:theList return (theArray’s sortedArrayUsingDescriptors:{aDdesc}) as list end sort1DList:ascOrder: |