Quando sento parlare di test di velocità dei browser sono sempre un po' perplesso. Si perchè i browser sono costituiti da diversi pezzi; c'è diciamo un'infrastruttura che tiene insieme i pezzi, c'è un motore di interpretazione dell'html, c'è il motore javascript che a sua volta può essere più o meno efficiente a fare una determinata cosa, c'è il DOM... insomma, di carne al fuoco ce n'è davvero tanta.

Nulla, questo post era solo per dire questo :)
ah, se non siete convinti, provate i due file che trovate in fondo al post su Chrome e su Firefox (NB disattivate firebug), poi ne riparliamo. I numerini che vedrete sono i tempi d'esecuzione. Vengono fatte diverse esecuzioni. I 2 file sono pressochè identici, ma uno dei due utilizza il costrutto with mentre l'altro accede esplicitamente all'oggetto.

Vabbè, se non avete voglia di sporcarvi le mani (e vi fidate) ecco un paio di screenshot mostranti i miei risultati.

Senza usare with


Usando with

Ed ecco i file:


Senza usare with
<html>
<body>
<script>
  var LS = {};
  
  
    LS.starTime = 0; 
    LS.endTime = 0;
    
    LS.a = 3;
    LS.b = 99;
    LS.avg = 0;
    LS.mul = 0;
    LS.div = 0;
    LS.div2 = 0;
    
    LS.doSomething = function() {
      LS.starTime = new Date().getTime();
      
      for (var i = 0; i < 100000; i++) {
        LS.avg = LS.a+LS.b/2;
        LS.mul = LS.a*LS.b;
        if (LS.b!=0) {
          LS.div = LS.a/LS.b;
          LS.div2 = Math.round(LS.a/LS.b);
        }
        LS.a++;
        LS.b--;
      }
      
      LS.endTime = new Date().getTime();
      
      document.write((LS.endTime-LS.starTime) + "<br/>");
      
    }
    
    for (var i=0; i<5; i++) {
      LS.doSomething();
    }
    
 
</script>
</body>
</html>
Usando with
<html>
<body>
<script>
  var LS = {};
  
  with(LS) {
  
    LS.starTime = 0; 
    LS.endTime = 0;
    
    LS.a = 3;
    LS.b = 99;
    LS.avg = 0;
    LS.mul = 0;
    LS.div = 0;
    LS.div2 = 0;
    
    LS.doSomething = function() {
      starTime = new Date().getTime();
      
      for (var i = 0; i < 100000; i++) {
        avg = a+b/2;
        mul = a*b;
        if (b!=0) {
          div = a/b;
          div2 = Math.round(a/b);
        }
        a++;
        b--;
      }
      
      endTime = new Date().getTime();
      
      document.write((endTime-starTime) + "<br>");
      
    }
    
    for (var i=0; i<5; i++) {
      doSomething();
    }
    
  }
</script>
</body>
</html>


PS: se vi state domandando perchè diavolo ho scritto questi file, la risposta è semplice, questi sono dei test preliminari per l'utilizzo di with... evidentemente sono falliti...

PPS: si sto lavorando per fixare il blog per IE, ho quasi finito, ora dovrebbe essere quasi tutto funzionante.