kkapsner
Super Moderator
Ich hab' hier gar kein Hausrecht - das hätte mo."Hausrecht" liegt bei kkapsner
Zeig' mir bitte den JS-Code, mit dem zu Sub-Selects fährst, ohne ins DOM zu greifen! Mehr will ich nicht.im Speicher (!) dann Sub-Selects fahre.
Und auch DOM-Transversal ist langsamer als Zugriff über ID:
Code:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Fenstertitel</title>
<style type="text/css"></style>
</head>
<body>
<script>
var fragment = document.createDocumentFragment();
for (var i = 0; i < 1000; i += 1){
var d = document.createElement("div");
d.id = "a" + i;
d.innerHTML = "<a>test</a>" + "h".repeat(i);
fragment.appendChild(d);
}
document.body.appendChild(fragment);
</script>
<div id="div1"><div id="div2">das hier will ich haben</div></div>
<script>
var fragment = document.createDocumentFragment();
for (var i = 0; i < 1000; i += 1){
var d = document.createElement("div");
d.id = "b" + i;
d.innerHTML = "<a>test</a>" + "h".repeat(i);
fragment.appendChild(d);
}
document.body.appendChild(fragment);
</script>
<script type="text/javascript">
var div1 = document.getElementById("div1");
function id(){
var div = document.getElementById("div2");
return div
}
function sub(){
var div = div1.getElementsByTagName("div")[0];
return div
}
function child(){
var div = div1.childNodes[0];
return div
}
function first(){
var div = div1.firstChild;
return div
}
var r = 1000000000;
window.setTimeout(function(){
var t = Date.now();
for (var i = 0; i < r; i += 1){
id();
}
console.log("id: " + (Date.now() - t) / r * 1000 + "µs");
r /= 100;
window.setTimeout(function(){
var t = Date.now();
for (var i = 0; i < r; i += 1){
sub();
}
console.log("sub: " + ((Date.now() - t)) / r * 1000 + "µs");
window.setTimeout(function(){
var t = Date.now();
for (var i = 0; i < r; i += 1){
child();
}
console.log("child: " + ((Date.now() - t)) / r * 1000 + "µs");
window.setTimeout(function(){
var t = Date.now();
for (var i = 0; i < r; i += 1){
first();
}
console.log("first: " + ((Date.now() - t)) / r * 1000 + "µs");
}, 0);
}, 0);
}, 0);
}, 0);
</script>
</body>
</html>
id: 0.000619µs
sub: 0.1166µs
child: 0.0664µs
first: 0.0007µs
Es ist also alles langsamer als der Zugriff über die ID! Man optimiert also nicht, wenn man die ID-Zugriffe durch was-auch-immer ersetzt.
@mikdoe: nicht,dass ich wüsste.