[Sie-announce] SIEコード [2930] image要素の画像読み込みを高速化

アーカイブの一覧に戻る

svnno****@sourc***** svnno****@sourc*****
2011年 9月 7日 (水) 22:59:22 JST


Revision: 2930
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2930
Author:   dhrname
Date:     2011-09-07 22:59:22 +0900 (Wed, 07 Sep 2011)

Log Message:
-----------
image要素の画像読み込みを高速化

Modified Paths:
--------------
    branches/08x/085/org/w3c/dom/svg.js

Modified: branches/08x/085/org/w3c/dom/svg.js
===================================================================
--- branches/08x/085/org/w3c/dom/svg.js	2011-09-07 13:58:41 UTC (rev 2929)
+++ branches/08x/085/org/w3c/dom/svg.js	2011-09-07 13:59:22 UTC (rev 2930)
@@ -1039,65 +1039,65 @@
             tar._tar.src = uri;
             tar = xmlhttp = null;
           } else if ((uri.indexOf("http:") > -1) || (uri.indexOf(".") === 0)){
-            if (tar.localName === "image") {
+            if ((tar.localName === "image") && (uri.indexOf(".svg") === -1)) {
               tar._tar.src = uri;
             } else {
               /*ここの_svgload_limitedは、リンクを読み込んだ後でSVGLoadイベントを実行させるという遅延処理で必要*/
               tar.ownerDocument.documentElement._svgload_limited++;
-            }
-            xmlhttp.open("GET", uri, false);
-            xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
-            xmlhttp.onreadystatechange = function() {
-              if ((xmlhttp.readyState === 4) && (xmlhttp.status === 200)) {
-                var type = xmlhttp.getResponseHeader('Content-Type') || "text",
-                    doc, str, ele, ev;
-                if ((type.indexOf("text") > -1) || (type.indexOf("xml") > -1) || (type.indexOf("script") > -1)) { //ファイルがtext形式である場合
-                  /*responseXMLを使うと、時々、空のデータを返すことがあるため(原因は不明)、
-                   *ここでは、responseTextを用いる
-                   */
-                  /*script要素とstyle要素は、
-                   *_textプロパティに読み込んだテキストを格納しておく
-                   *それら以外は、_instanceプロパティにDOMツリーを格納しておく
-                   */
-                  if (tar.localName !== "script" && tar.localName !== "style") {
-                    doc = new ActiveXObject("MSXML2.DomDocument");
-                    str = xmlhttp.responseText.replace(/!DOCTYPE/,"!--").replace(/(dtd">|\]>)/,"-->");
-                    NAIBU.doc.async = false;
-                    NAIBU.doc.validateOnParse = false;
-                    NAIBU.doc.resolveExternals = false;
-                    NAIBU.doc.preserveWhiteSpace = false;
-                    doc.loadXML(str);
-                    ele = doc.documentElement;
-                    tar._instance = tar.ownerDocument.importNode(ele, true);
-                    if (id) {
-                      tar._instance = tar._instance.ownerDocument.getElementById(id);
+              xmlhttp.open("GET", uri, false);
+              xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+              xmlhttp.onreadystatechange = function() {
+                if ((xmlhttp.readyState === 4) && (xmlhttp.status === 200)) {
+                  var type = xmlhttp.getResponseHeader('Content-Type') || "text",
+                      doc, str, ele, ev;
+                  if ((type.indexOf("text") > -1) || (type.indexOf("xml") > -1) || (type.indexOf("script") > -1)) { //ファイルがtext形式である場合
+                    /*responseXMLを使うと、時々、空のデータを返すことがあるため(原因は不明)、
+                     *ここでは、responseTextを用いる
+                     */
+                    /*script要素とstyle要素は、
+                     *_textプロパティに読み込んだテキストを格納しておく
+                     *それら以外は、_instanceプロパティにDOMツリーを格納しておく
+                     */
+                    if (tar.localName !== "script" && tar.localName !== "style") {
+                      doc = new ActiveXObject("MSXML2.DomDocument");
+                      str = xmlhttp.responseText.replace(/!DOCTYPE/,"!--").replace(/(dtd">|\]>)/,"-->");
+                      NAIBU.doc.async = false;
+                      NAIBU.doc.validateOnParse = false;
+                      NAIBU.doc.resolveExternals = false;
+                      NAIBU.doc.preserveWhiteSpace = false;
+                      doc.loadXML(str);
+                      ele = doc.documentElement;
+                      tar._instance = tar.ownerDocument.importNode(ele, true);
+                      if (id) {
+                        tar._instance = tar._instance.ownerDocument.getElementById(id);
+                      }
+                    } else {
+                      tar._text = xmlhttp.responseText;
                     }
-                  } else {
-                    tar._text = xmlhttp.responseText;
+                  } else if (!!tar._tar) {
+                    tar._tar.src = uri;
                   }
-                } else if (!!tar._tar) {
-                  tar._tar.src = uri;
-                }
-                /*S_LoadイベントとはSIE独自のイベント。
-                 *XLink言語によって、リンク先のコンテンツが読み込まれた時点で発火する
-                 */
-                ev = tar.ownerDocument.createEvent("SVGEvents");
-                ev.initEvent("S_Load", false, false);
-                tar.dispatchEvent(ev);
-                tar.ownerDocument.documentElement._svgload_limited--;
-                /*すべてのリンクが読み込みを終了した場合、SVGLoadイベントを発火*/
-                if (tar.ownerDocument.documentElement._svgload_limited < 0) {
+                  /*S_LoadイベントとはSIE独自のイベント。
+                   *XLink言語によって、リンク先のコンテンツが読み込まれた時点で発火する
+                   */
                   ev = tar.ownerDocument.createEvent("SVGEvents");
-                  ev.initEvent("SVGLoad", false, false);
-                  tar.ownerDocument.documentElement.dispatchEvent(ev);
+                  ev.initEvent("S_Load", false, false);
+                  tar.dispatchEvent(ev);
+                  tar.ownerDocument.documentElement._svgload_limited--;
+                  /*すべてのリンクが読み込みを終了した場合、SVGLoadイベントを発火*/
+                  if (tar.ownerDocument.documentElement._svgload_limited < 0) {
+                    ev = tar.ownerDocument.createEvent("SVGEvents");
+                    ev.initEvent("SVGLoad", false, false);
+                    tar.ownerDocument.documentElement.dispatchEvent(ev);
+                  }
+                  tar = type = doc = str = ev = null;
+                  /*IEのメモリリーク対策として、空関数を入力*/
+                  xmlhttp.onreadystatechange = NAIBU.emptyFunction;
+                  xmlhttp = null;
                 }
-                tar = type = doc = str = ev = null;
-                /*IEのメモリリーク対策として、空関数を入力*/
-                xmlhttp.onreadystatechange = NAIBU.emptyFunction;
-                xmlhttp = null;
-              }
-            };
-            xmlhttp.send(null);
+              };
+              xmlhttp.send(null);
+            }
           }
         }
         tar.ownerDocument.documentElement._svgload_limited--;




Sie-announce メーリングリストの案内
アーカイブの一覧に戻る