[Sie-announce] SIEコード [1935] path要素のアルゴリズムを高速化できるように改良

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2010年 7月 11日 (日) 22:00:37 JST


Revision: 1935
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1935
Author:   dhrname
Date:     2010-07-11 22:00:37 +0900 (Sun, 11 Jul 2010)

Log Message:
-----------
path要素のアルゴリズムを高速化できるように改良

Modified Paths:
--------------
    branches/06x/061/org/w3c/dom/svg.js

Modified: branches/06x/061/org/w3c/dom/svg.js
===================================================================
--- branches/06x/061/org/w3c/dom/svg.js	2010-07-09 14:26:52 UTC (rev 1934)
+++ branches/06x/061/org/w3c/dom/svg.js	2010-07-11 13:00:37 UTC (rev 1935)
@@ -2276,47 +2276,40 @@
        *SVGのd属性をVMLに変換していく処理である。
        */
       var tar = evt.target, matrix = tar.getScreenCTM(), tlist = tar.normalizedPathSegList, _parseInt = parseInt;
-      var dat = "", ma = matrix.a, mb = matrix.b, mc = matrix.c, md = matrix.d, me = matrix.e, mf = matrix.f;
+      var dat = [], ma = matrix.a, mb = matrix.b, mc = matrix.c, md = matrix.d, me = matrix.e, mf = matrix.f;
       for (var i=0, tli=tlist.numberOfItems;i<tli;++i) {
         var ti = tlist.getItem(i), tps = ti.pathSegTypeAsLetter;
+        /*IE6の高速化のために、以下では、x += "";のような文字連結ではなくて、
+         *x[data.length] = "";という形をとった
+         */
         if (tps === "z" || tps === "Z") {
-          dat += " x ";
+          dat[dat.length] = " x ";
         } else {
           if (tps === "M") {
-            dat += "m";
+            dat[dat.length] = "m";
           } else if (tps === "L") {
-            dat += "l";
+            dat[dat.length] = "l";
           } else if (tps === "C") {
-            dat += "c";
+            dat[dat.length] = "c";
             /*CTM(mx)の行列と座標(x, y)の積を算出する。数学における表現は以下のとおり
              *[ma mc me]   [x]
              *[mb md mf] * [y]
              *[0  0  1 ]   [1]
              */
-            var x = _parseInt(ma*ti.x1 + mc*ti.y1 + me, 10);
-            var y = _parseInt(mb*ti.x1 + md*ti.y1 + mf, 10);
-            x += " ";
-            y += " ";
-            dat += x;
-            dat += y;
-            x = _parseInt(ma*ti.x2 + mc*ti.y2 + me, 10);
-            y = _parseInt(mb*ti.x2 + md*ti.y2 + mf, 10);
-            x += " ";
-            y += " ";
-            dat += x;
-            dat += y;
+
+            dat[dat.length] = _parseInt(ma*ti.x1 + mc*ti.y1 + me, 10);
+            dat[dat.length] = _parseInt(mb*ti.x1 + md*ti.y1 + mf, 10);
+            dat[dat.length] = _parseInt(ma*ti.x2 + mc*ti.y2 + me, 10);
+            dat[dat.length] = _parseInt(mb*ti.x2 + md*ti.y2 + mf, 10);
           }
-          var x = _parseInt(ma*ti.x + mc*ti.y + me, 10); //_parseIntはparseIntのエイリアスであり、値を丸めるのに使う
-          var y = _parseInt(mb*ti.x + md*ti.y + mf, 10);
-          x += " "; //文字列型に変換しておき、空白で区切りを付ける
-          y += " ";
-          dat += x;
-          dat += y;
+          dat[dat.length] = _parseInt(ma*ti.x + mc*ti.y + me, 10);
+          dat[dat.length] = _parseInt(mb*ti.x + md*ti.y + mf, 10);
         }
       }
       var vi = tar.ownerDocument.documentElement;
       var w = vi.width.baseVal.value, h = vi.height.baseVal.value;
-      tar._tar.path = dat + " e";
+      dat[dat.length] = " e";
+      tar._tar.path = dat.join(" ");
       tar._tar.coordsize = w + " " + h;
       NAIBU._setPaint(tar, matrix);
       evt = tar = w = h = matrix = dat = x = y = null;




Sie-announce メーリングリストの案内
Back to archive index