自作スクリプトの動作が重いような気がして心配なのでベンチマークをとってみた
まずは、■クリエイター手抜きプロジェクト[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