Hatena::ブログ(Diary)

なにする?DTP+WEB

2009-11-12

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

ドキュメント上の“塗りに線”を“線”に変更してくれるIllustratorのJavaScript『ヘアラインレタッチ』 | DTPデザイナーの育児日記イラストレータースクリプトの話題があったのだけど、

そこに出てくる2つのスクリプト

イラレで便利さんの『塗り線さがし』と

Mr.Riさん DTP宝箱の『ヘアラインレタッチ』の

実行速度について触れられている。

ふ〜んそうなんだ。

……。

これで終わったんじゃ、この話はここでおしまいなんだけど。

もうちょっと掘り下げて、両方のスクリプトを読んでみてわかったことを書いてみる。

f:id:kamiseto:20091112121531p:image

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

スクリプトの最初に

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

最後に

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

を挿入にて実行速度を測ってみる。

それぞれ、

「塗り線さがし.jsx」

f:id:kamiseto:20091112121535p:image

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

f:id:kamiseto:20091112121533p:image

と結果が出た。

確かに圧倒的な差が出ています。


スクリプトの何処で、そんなに差がつくのか、

実際にスクリプトを読み進めてる。

う〜ん。

人それぞれ書き方に個性が出ていておもしろい。

いや、そんなことじゃなくて。

そこで引っかかったのが、以前書いたエントリー

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;

実行速度を測ってみる。

f:id:kamiseto:20091112121534p:image


うん早くなった。

それでも、『ヘアラインレタッチ』の方がまだ半分の速さだ。

う〜ん。

milligrammemilligramme 2009/11/12 13:09 こんにちは、実行速度の図、1個目と2個目が逆みたいです。
Illustratorのデータチェックスクリプトって、作り手がとんでもない暴れん坊なデータつくってくるのを想定して実行速度も重要視しなくてはいけないのですね。

kamisetokamiseto 2009/11/12 14:56 >>こんにちは、実行速度の図、1個目と2個目が逆みたいです。
ありがとうございます。直しておきました。
暴れん坊なデーター程チェックが必要なことろが悩みどころです。

ちょっとした違いでこれだけ速度がちがうのは
かんべんしてほしいところですが…それがプログラムの醍醐味なんですかねぇ。アドビ様。

Mr.RiMr.Ri 2009/11/13 11:12 Mr.Riです。さきほど、AI JavaScript を爆速化するためのサンプルをアップしました。コメントが入っているので、わかりやすいかと思います。トップページからダウンロードできます。参考になさってください。

kamisetokamiseto 2009/11/13 12:16 Mr.Riさん。
さっそくサンプルを見ました。
丁寧なコメントを付けていただきありがとうござます。
とても参考になりました。
レイヤー毎に処理していくことで、表示に負荷がかからなくて
高速化できるということでしょうか。

Mr.RiMr.Ri 2009/11/13 18:10 理由がよく分かっている訳ではないですが、イラストレーターがドキュメント上のすべてのパスを配列として用意する仕組みは、とても遅いということは確かです。おそらくですが、配列を新たに作成し直しているのではないでしょうか。サンプルは、その仕組みに完全に置き換えるルーチンを用意したにすぎません。ようするに余計な処理をスキップしたという訳です。同じことはインデザインにもいえて、やはりオブジェクトを階層毎に処理していくことで、10倍前後は高速化できます。ヘアラインレタッチ1.2のインデザイン版では、その仕組みを取り入れて早くしています。

kamisetokamiseto 2009/11/13 21:36 解説ありがとうございます。
なるほど。インデザインも同じなんですね。
イラストレーターだけ駄目な子かと思ってました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

配置済みPDFのクロップ(トリミング方式)を調べたり変えて再配置した ...
//id_PDF_CropViewer.jsx by(z-) ver_e #target indesign #targetengine &quot;PDFCROP&quot; &
配置PDF(ai)を選択して実行、プロンプトに入力したページで再配置、い?? ...
//配置PDF(ai)の参照ページを変更(再配置)するやつ 2017.03.07(z-) //レイヤー表示オプションなどは非対応の簡易版 &nbsp; var crop, cropIndexA
座標の重複したアンカーポイントを持つオブジェクトをさがす、その後 ...
//ai_findPilePaths.jsx 2017.03.03(z-) //座標の重複したアンカーポイントを持つオブジェクトをさがす。 //その後、任意で削除。 ////アンカーポイントのハンドル
選択した画像と同じサイズの長方形を作るやつ。処理後は長方形群だけ ...
//選択した画像と同じサイズの長方形を作る 2017.02.23 (z-) var doc = app.activeDocument; var pepsi = doc.placedItems; var
選択テキストに適用されている段落スタイルがベースになっている&「 ...
//id_findChildrenStyles.jsx 2017.01.27(z-) //選択テキストに適用されている段落スタイルがベースになっている段落スタイル、 //「次のスタイル」に使用している
この日記のはてなブックマーク数