5

Ich habe ein sehr merkwürdiges Verhalten mit meiner Anwendung - wenn ich den Profiler starte (muss JS Profiler sein), arbeitet der Code fast doppelt so schnell.JavaScript-Code funktioniert schneller, wenn JS Profiling aktiviert ist? Was?

ich es mit einem sehr einfachen Code wiedergegeben habe, die auf dieser Geige zu finden ist: https://jsfiddle.net/zagrwk44/

Die Sache ist, dass dies nur bei Maschinen mit alten Grafikkarten wiedergibt. Ich habe es geschafft, es auf einer Maschine mit AMD Radeon HD 6450 Grafikkarte zu reproduzieren. Auf einer neueren Maschine reproduziert dies nicht mehr.

Wie kommt es, dass der Profiler den Code schneller laufen lässt ?? fast doppelt so schnell!

Der Code, der die Zeit hier dauert nur auf dem Bildschirm, um die Position eines div zu ändern:

for (var i = 0; i < 1000000; i++) { 
    box.style.top = getRandomInt(0, 100) + '%'; 
    box.style.left = getRandomInt(0, 100) + '%';     
}; 

Ich beginne und die Profiler über Javascript mit console.profile und console.profileEnd zu stoppen. Um es zu reproduzieren, muss DevTools beim Ausführen geöffnet werden.

Vielen Dank!

Antwort

0

Ich fand dieses seltsame Verhalten, das mir nur auf "Windows Server 2008 R2 Enterprise" Betriebssystem passiert.

Tester sind nicht korrekt angezeigt wird, da sie die Leistung mit einer Zufallsfunktion testen, die auf ein anderen Ergebnisse für jede Probe führen könnten, mehr als, dass Sie nicht ausschließen console.profile() und console.profileEnd() von der Zeit Sampling, was bedeutet, dass Sie nie eine echte native Ergebnisse erhalten.

Um ein besseres und realistisches Ergebnis bekommen Sie den Code sollte wie folgt aussehen:

var random = [80,90,15,5,70,50,60,25,36,45,62,58,76,23,93]; 

fbtn.addEventListener('click', function() { 

    //START PROFILE BEFOR TIME START 
    if (withProfiling.checked) { 
     console.profile(); 
    } 

    console.time('click handler'); 
    for (var i = 0, v =0; i < 1000000; i++, v++) { 
     box.style.top = random[v] + '%'; //USE SAME NUMBERS FOR ALL TESTS 
     box.style.left = random[v] + '%';//USE SAME NUMBERS FOR ALL TESTS 

     if(v >= 14){ 
     v= 0; 
     }   
    }; 
    console.timeEnd('click handler'); 

    // STOP PROFILE AFTER TIME END 
    if (withProfiling.checked) { 
      console.profileEnd(); 
     } 
    }); 

hier ist ein Tester, die es in mehr Tiefe verfolgen konnte: http://embed.plnkr.co/bdreL4UVFyyWtDoNTXRs/

i entfernen Sie den Start-Profiler von Code Weil ich dieses seltsame Verhalten gefunden habe, stelle ich es besser wieder her, indem ich die Profile manuell starte.

wiederherstellen, wählen Sie die "Collect Javascript CPU Profile" aus den Profilen von DevTools in Chrome.

Hoffe, dass es nützlich,

Menachem

2

Kann nicht auf meinem Rechner repro war.
Aber ich bin neugierig, vergleichen Sie einen Lauf mit DevTools offen gegen einen Lauf mit Profiler? Wenn dies der Fall ist, könnte die Erklärung darin bestehen, dass DevTools interne Benachrichtigungen deaktiviert, wie beispielsweise Aktualisierungen des Bedienfelds "Elemente", wenn das Profiling aktiv ist.
Wenn Sie einen Lauf mit geschlossenen DevTools vergleichen, sieht das wirklich komisch aus.

Verwandte Themen