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 解説ありがとうございます。
なるほど。インデザインも同じなんですね。
イラストレーターだけ駄目な子かと思ってました。

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


画像認証

アートボードの任意の辺だけをオブジェクトに合わせる
//ai_artboard_fitter.jsx 2017.09.14(z-) ver_a //選択したオブジェクトにアートボードサイズを任意の辺だけ合わせる &nbsp; &nbsp
選択したひとかたまりごとに行/列の残り全部それぞれ結合していきます
//id_mergeEach.jsx 2017.01.31(z-) // ver_b 2017.06.28 処理範囲外に結合セルがあると動作不良が起きていたのを修正 &nbsp; var se
ファイル名で示す規定値でオブジェクトを等間隔に分布するやつ
//id_distribute_=_0mm.jsx 2017.06.27(z-)ver_b //規定値で等間隔に分布する //規定値はスクリプトのファイル名で指定する //ファイル名は &qu
選択内の段落群を自動で手動インデントするやつのイラスター移植版
//ai_indentSetter.jsx 2017.06.21(z-) //選択内の段落群を自動で手動インデントするやつ //2017.06.21 ver_a &nbsp; #target
選択内の段落群を自動で手動インデントするやつ。既存値とのバッティ ...
//id_indentSetter.jsx 2017.06.19(z-) //選択内の段落群を自動で手動インデントするやつ //2017.06.19 ver_a &nbsp; #target
この日記のはてなブックマーク数
Connection: close