JavaScriptの高速化

高速化ってのは、ちとおおげさだったかな。

今回、自前のテキスト変換系InDesignスクリプトの
スピードアップ化に挑戦してみました。

とりあえず前回の時間測定用のスクリプトを使ってみると。。

77秒。
うーん目標は1分以内ですかね。。

とりあえず、これも前に紹介したドキュメントを隠すスクリプトを実行。

70秒。。少しだけ速くなったけどもうちょっと速くしたいですね。
Adobe系スクリプトでオブジェクトの数だけ実行するというループの表記で

for (var i=0; i < Object.length; i++)

てのがよくあります。
lengthというのはObjectの要素数を取得するためのプロパティなんですけど
でもこれ実は、ループをまわすたびに要素数を計算しちゃってるんですよね。
なので

var Len = Object.length;
for (var i=0; i < Len; i++)

このようにObjectの要素数をfor文の手前で変数に入れてしまうか

for (var i=0,Len = Object.length; i < Len; i++)

for文の初期設定部分で要素数を変数に入れてしまえば、
一回しか要素数の計算をせずに速くなるというわけ。

こういった訂正を全体的に施してみると、、、


キター
60秒切りました!!

というわけで、作ったスクリプトがおっせーなあ、、と思ったら
こういうスピードアップに挑戦してみるといいかも。