Hi Tim,

On 10/19/2013 07:03 PM, Tim Streater wrote:
On 18 Oct 2013 at 22:56, Boris Zbarsky <[email protected]> posted, inter alia, 
this code:

[1] The testcase:

<!DOCTYPE html>
<script>
   document.write("<svg id='root' width='0' height='0'>");
   for (var i = 0; i < 100; ++i) {
     document.write("<rect/>");
   }
   document.write("<rect id='test'/>");
   document.write("</svg>\n");
</script>
<pre><script>
   var node;
   var count = 200000;
   function doTests(root, elementId, descQS, descQSNoConcat, descGEBI) {
     var start = new Date;
     for (var i = 0; i < count; ++i)
       node = root.querySelector("#" + elementId);
     var stop = new Date;
     document.writeln(descQS + ((stop - start) / count * 1e6));
     var start = new Date;
     for (var i = 0; i < count; ++i)
       node = root.querySelector("#test");
     var stop = new Date;
     document.writeln(descQSNoConcat + ((stop - start) / count * 1e6));
     var start = new Date;
     for (var i = 0; i < count; ++i)
       node = root.getElementById(elementId);
     var stop = new Date;
     document.writeln(descGEBI + ((stop - start) / count * 1e6));
   }
   var root = document.getElementById("root");
   var start = new Date;
   for (var i = 0; i < count; ++i)
     node = document.getElementById("test");
   var stop = new Date;
   document.writeln("document.getElementById: " + ((stop - start) /
count * 1e6));
   doTests(root, "test",
           "In-tree querySelector: ",
           "In-tree querySelector, no string concat: ",
           "In-tree getElementById: ");
   root.remove();
   doTests(root, "test",
           "Out-of-tree querySelector: ",
           "Out-of-tree querySelector, no string concat: ",
           "Out-of-tree getElementById: ");
</script>

I've tested this here on five browsers and it runs to completion Ok
apart from iCab, which didn't like root.remove so I did that bit
longhand. But I'm left confused. The other day I ranted about needing
to use a document fragment and having to use querySelector on a table
body. Now this code appears to imply that I need neither and could
have used getElementById all along, since your application of
getElementById above is mostly not to a document. I'm sure that when
I tested that, a year or so back, it didn't work. Could you
elucidate?

Quoting part of the original email you trimmed:

Luckily, we have SVGSVGElement.prototype.getElementById available to
compare to Element.prototype.querySelector.

That is, getElementById is available on |svg| elements in the SVG namespace.

HTH
Ms2ger

Reply via email to