Optimisation de boucle JS
Bonjour a tous, je me demandais si il y avais un moyen d'effectuer cette réduction plus rapidement qu'en passant par une boucle (il peu y avoir 10000 element dans l'array) car ces dernières ont l'air de ralentir considérablement IE.
Code:
1 2 3 4 5
|
tab_dn = new Array();
for (var i=0;i<users.length;i++){
tab_dn[i] = users[i]['dn'];
} |
Merci
différences de performance entre une boucle for et une boucle while, push et affectation
Je ne jurerais de rien! Avec toutes les nouvelles versions de navigateurs on obtient des résultats moins clairs qu'avant j'ai l'impression. Document de test :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>différences de performance entre une boucle for et une boucle while, push et affectation</title>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<style type="text/css">
* {margin:0;padding:0;}
body {margin:10px;background:#000;color:#ddd;font-size:1em;font-family:Helvetica, Arial, sans-serif;}
</style>
</head>
<body>
<p id="fl1">for (length recalculé) : </p>
<p id="fl2">for (avec push et length recalculé) : </p>
<p id="f1">for : </p>
<p id="f2">for (avec push) : </p>
<p id="w1">while : </p>
<p id="w2">while (avec push) : </p>
<script type="text/javascript">
<!--
var fl1 = document.getElementById("fl1");
var fl2 = document.getElementById("fl2");
var f1 = document.getElementById("f1");
var f2 = document.getElementById("f2");
var w1 = document.getElementById("w1");
var w2 = document.getElementById("w2");
var ti = new Array();
ti.length = 100000;
var t1a = new Array();
var debut = new Date();
for (var i=0; i<ti.length; i++) {
t1a[i] = i;
}
var fin = new Date()
fl1.firstChild.nodeValue = "for (length recalculé) : "+ (fin - debut) +" ms";
var t1b = new Array();
var debut = new Date();
for (var i=0; i<ti.length; i++) {
t1b.push(i);
}
var fin = new Date()
fl2.firstChild.nodeValue = "for (avec push et length recalculé) : "+ (fin - debut) +" ms";
var t2a = new Array();
var debut = new Date();
for (var i=0,imax=ti.length; i<imax; i++) {
t2a[i] = i;
}
var fin = new Date()
f1.firstChild.nodeValue = "for : "+ (fin - debut) +" ms";
var t2b = new Array();
var debut = new Date();
for (var i=0,imax=ti.length; i<imax; i++) {
t2b.push(i);
}
var fin = new Date()
f2.firstChild.nodeValue = "for (avec push) : "+ (fin - debut) +" ms";
var t3a = new Array();
i = ti.length;
debut = new Date();
while(i--){
t3a[i] = i;
}
fin = new Date()
w1.firstChild.nodeValue = "while : "+ (fin - debut) +" ms";
var t3b = new Array();
i = ti.length;
debut = new Date();
while(i--){
t3b.push(i);
}
fin = new Date()
w2.firstChild.nodeValue = "while (avec push) : "+ (fin - debut) +" ms";
//-->
</script>
</body>
</html> |