Shane Stanleyのフリーソフトウェア「Script Geek」の新バージョンv2.0が公開されました。
▲Dark ModeにするとAbout画面の文字が見えない。うん、これ自分も気をつけよう(^ー^;
前バージョンからの相違点は、Dark Modeへの対応などですが、大幅に変わったりはしていません。2つのAppleScriptの処理時間を計測するというものです。
本ツールは利用頻度も高く、実際にScriptを書いている最中によく走らせています。
Cocoaの機能を呼び出す場合には、処理対象のデータ数によっては従来のAppleScriptによる処理よりも遅くなることがあるので、「本当にCocoaで処理させたほうが高速か?」ということをいちいち確認しておく必要があります。
ほんの数個の要素からなる配列のソートにCocoaの機能を使うと逆に遅くなりますし、数万要素の配列からの条件抽出にCocoaの機能を使わないと損です。
つまり、AppleScriptからのCocoaの利用については、速度的なメリットがない場合には使わないほうがいいという点が「真髄」といいますか、その一番大事なところであって、本ツールの存在・利用そのものがShane Stanleyのノウハウそのものなんですね。
ついでに、身の回りのマシンで同じ処理のベンチマークをScript Geek 2.0を用いて行ないました。処理内容は、おおよそCocoaの機能を使わないほうが速そうな、小さなデータの判定処理です。
Machine | MacBookPro10,1 | MacBookPro9,1 | MacBookAir4,1 | Macmini7,1 |
メインマシン。10.14以上に上げない環境 | Beta版OS専用 | 持ち歩き用。検証環境 | 検証環境 | |
CPU | Core i7 2.6GHz | Core i7 2.7GHz | Core i5 1.6GHz | Core i5 2.6GHz |
CPU Core | 4.0 | 4.0 | 2.0 | 2.0 |
RAM | 8GB | 8GB | 4GB | 16GB |
OS | 10.14.6 | 10.15.1beta | 10.13.6 | 10.15 |
Storage | SSD | HDD | SSD | Fusion Drive |
1st Script | 0.115 | 0.138 | 0.182 | 0.086 |
2nd Script | 0.608 | 14.179 | 1.589 | 13.798 |
以前に、花文字作成Scriptでメイン環境のMacBook Pro Retina 2012が、最近加入した検証用マシンMac mini 2014の10倍以上高速だったことがあって、しかもデータ的にはメモリ上で十分に終わってしまいそうな内容であったために、その理由がわからないままでした。
そこで、こうして手元のマシンをすべてかき集めて、Script Geekでベンチマークを行なった次第です。
その結果、
(1)HDD搭載マシンがSSD搭載マシンの10倍程度の処理時間になっている。メモリ搭載量とか関係なくHDD搭載機だと遅い。Fusion Driveでも同様
(2)コア数は少ないよりも多いほうがよいが、デュアルコア程度だとCocoaの機能を利用するのに不利。最低でもクアッドコアは必要
(3)メモリは少ないよりも多いほうがよいが、それよりもブートドライブがSSDであること、CPUコア数が4コア以上であることが重要
といったことがわかりました。SSD搭載機でないマシンというのは現行のラインナップの中にも少なくなっていますが、HDD搭載のMac miniというのはプログラムの実行専用の機械としては割とありふれていますし、Fusion Drive搭載のiMacも同様でしょう。これらHDD搭載機だと場合によってはかるーく10倍ぐらい遅くなるということに留意すべきでしょう。
もちろん、ファイルI/Oを多用するScriptについてはSSDや、場合によってはRAM Diskを使うことが望ましいわけで、これぐらい処理データが小さいプログラムでも顕著な差が見られたことがポイントです。
AppleScriptで実際の処理を行なってみると、最新のマシンだからといって速くなっていないというか、むしろそんなに速くないとか、最上位機種のはずのiMac Proでも処理内容によっては2012年のMacBook Proの方が高速だったりと(これにはおどろいた)、機械ごとに得手・不得手があるというか、性能差というものが値段や年式に単純に比例しているわけではないことを痛感するものです(2013年以降、2018年ぐらいまでIntel CPUの製造プロセスは変わってないし、2018年ぐらいまでIPCが大幅に改善されたという話も聞きません)。
開発機としてしばらくMacBook Pro 13インチの2017年モデルを使っていましたが、正直MacBook Pro Retina 2012と比べてCPU自体の処理性能は同じか、むしろ遅いぐらいでした(バッテリーはアホみたいにもちましたが)。
ただ、メインメモリ8GBだとAdobeのCreative Cloudアプリケーションで足切りが行われており(最低16GB、実用上は32GBあたり?)、そろそろメイン環境は交代したいところです。
AppleScript名:script1 |
set aStr to "1111" set aRes1 to chkEachDigitIsNotSameChar(aStr as string) of me –> false set aStr to "1234" set aRes1 to chkEachDigitIsNotSameChar(aStr as string) of me –> true on chkEachDigitIsNotSameChar(aStr as string) set aLen to length of aStr set aList to characters of aStr set bList to {} repeat with i in aList set j to contents of i if j is not in bList then set the end of bList to j else return false end if end repeat return true end chkEachDigitIsNotSameChar |
AppleScript名:script2 |
— Created 2017-12-17 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "1111" set aRes1 to chkEachDigitIsNotSameChar(aStr as string) of me –> false set aStr to "1234" set aRes1 to chkEachDigitIsNotSameChar(aStr as string) of me –> true on chkEachDigitIsNotSameChar(aStr as string) set aList to characters of aStr set aLen to length of aList set aSet to current application’s NSCountedSet’s alloc()’s initWithArray:aList set bList to (aSet’s allObjects()) as list set bLen to length of bList return (aLen = bLen) end chkEachDigitIsNotSameChar |