2つのスクリプトの速さの違いはどこにある。

ドキュメント上の“塗りに線”を“線”に変更してくれるIllustratorのJavaScript『ヘアラインレタッチ』 | DTPデザイナーの育児日記イラストレーターのスクリプトの話題があったのだけど、
そこに出てくる2つのスクリプト
イラレで便利さんの『塗り線さがし』と
Mr.Riさん DTP宝箱の『ヘアラインレタッチ』の
実行速度について触れられている。
ふ〜んそうなんだ。
……。
これで終わったんじゃ、この話はここでおしまいなんだけど。
もうちょっと掘り下げて、両方のスクリプトを読んでみてわかったことを書いてみる。

両方のスクリプト共にまず
スクリプトの最初に

var X = (new Date).getTime();

最後に

var Y = (new Date).getTime();
alert(Y-X);

を挿入にて実行速度を測ってみる。
それぞれ、
「塗り線さがし.jsx」

「ヘアラインレタッチAICS2.jsx」

と結果が出た。
確かに圧倒的な差が出ています。


スクリプトの何処で、そんなに差がつくのか、
実際にスクリプトを読み進めてる。
う〜ん。
人それぞれ書き方に個性が出ていておもしろい。
いや、そんなことじゃなくて。

そこで引っかかったのが、以前書いたエントリー
app.activeDocument.pathItemsやapp.activeDocument.pageItemsは遅い

ということで、
ちょっと失礼して「塗り線さがし.jsx」の40行目あたりに3行ほど追加。

var P = [];
for( var i=0; i<searchObj.length; i++ )P.push(searchObj[i]);
searchObj = P;

実行速度を測ってみる。


うん早くなった。
それでも、『ヘアラインレタッチ』の方がまだ半分の速さだ。
う〜ん。