21. 21
new Functionによるオーバーヘッドの削減(1)
• 同じ図形をパス(moveToやlineToなど)を駆使して描
画する場合、描画用のデータを毎回解析せず、最初
に文字列として関数を作成し、それを関数化するこ
とでオーバーヘッドを削減できる
var svg = "M 51.35 38.55 L 30.35 0 L 21 0 L 0 38.55 L 8.3 38.55"
+ " L 12.7 30.3 L 38.65 30.3 L 43.05 38.55 L 51.35 38.55"
+ " M 34.9 23.5 L 16.5 23.5 L 25.7 6.45 L 34.9 23.5".split(" ");
var body = "ctx.beginPath();";
for(var i = 0; i < svg.length; i+=3) {
var pos = svg[i + 1] + "," + svg[i + 2];
if(svg[i] == "M") { body += "ctx.moveTo(" + pos + ");"; }
if(svg[i] == "L") { body += "ctx.lineTo(" + pos + ");"; }
}
var func = new Function("ctx", body + "ctx.fill();");
func(ctx);
Broadtail Confidential
Confidential
21