自作スクリプトの動作が重いような気がして心配なのでベンチマークをとってみた


まずは、■クリエイター手抜きプロジェクト[160]Illustrator CS2/CS3編 文字ごとに書体 色を個別に変える/古籏一浩を参考に標準的なスクリプトを走らせてみた。

var start = new Date().getTime();
fontList = [
app.textFonts.getByName("DFPGanShinKeiCID-W7"),
app.textFonts.getByName("DFPLeiGaSoCID-W9"),
app.textFonts.getByName("DFPHSMinchoCID-W9")
]
sel = activeDocument.selection;
for (j=0; j< sel.length; j++)
{
selObj = sel[j];
n = 0;
for (i=0; i< selObj.textSelection[0].characters.length; i++)
{
selObj.textSelection[0].characters[i].textFont = fontList[n];
n++;
n = n % fontList.length;
}
}
var end = new Date().getTime();
alert(end-start);

結果は


次に自作のライブラリを使った場合

#include "c.js"
/*
var fontList = []
c(textFonts).each(function(){fontList.push(app.textFonts.getByName(this.name));});
*/
var start = new Date().getTime();
var fontList  = [
app.textFonts.getByName("DFPGanShinKeiCID-W7"),
app.textFonts.getByName("DFPLeiGaSoCID-W9"),
app.textFonts.getByName("DFPHSMinchoCID-W9")
];
n = 0;
c.filters.characters = function(s){
	this.each(function(){
	this.characters.each(function(){s.push(this)});
	});
	return s;
}

c("S").f("T").f('characters').each(function(){
			this.textFont = fontList[n];
			n++;
			n = n % fontList.length;
});
var end = new Date().getTime();
alert(end-start);

結果は

余計にループを回していたりする分遅いと思っていたが、
そんなに遅くないようだ。
ひと安心。


次にパスでは、どうだろう。
お題は「たくさんあるパスの色を変更するスクリプト

普通に書けばこんな感じかな。

colObj = new RGBColor();
colObj.red = 255;
colObj.green = 0;
colObj.blue = 0;
var start = new Date().getTime();
var P = app.activeDocument.pathItems;
var P_length = P.length;
var i = 0;
for(i =0; i < P_length; i ++)P[i].fillColor = colObj;
var end = new Date().getTime();
alert(end-start);

結果は

次に自作のライブラリを使った場合。

#include "c.js"
colObj = new RGBColor();
colObj.red = 0;
colObj.green = 255;
colObj.blue = 0;
var start = new Date().getTime();
c("S").f("P").e(function(){this.fillColor = colObj;});
var end = new Date().getTime();
alert(end-start);

結果は


いや、正直ビックリです。
3倍以上早い、別に赤くないのに…
この結果は期待してませんでした。


ちなみに計測した環境はIllustratorCS3,PowerPC G5 Dual 2.0GHz