Vorrei misurare il tempo necessario prima che venga visualizzato un cambiamento DOM eseguito da un javascript.Misurazione del tempo di modifica del rendering avviato da Javascript
Si consideri l'esempio di file SVG:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="1600"
height="1000"
version="1.1">
<script xlink:href="clicktest.js" />
<defs>
<filter id="filterBlur" x="-0.6" width="2.2" y="-0.6" height="2.2">
<feGaussianBlur stdDeviation="120" />
</filter>
</defs>
<rect y="50" x="50" height="100" width="200" style="fill:#ff0000" onmousedown="red()" />
<rect y="50" x="300" height="100" width="200" style="fill:#0000ff" onmousedown="blue()" />
<circle cx="800" cy="600" r="300" id="circle"
style="fill:#888888;filter:url(#filterBlur)" />
<text id="time" x="1250" y="50" style="font-size:40px">time...</text>
<rect x="900" y="300" width="600" height="600"
style="fill:#650088;fill-opacity:0.5;filter:url(#filterBlur)" />
<rect x="100" y="400" width="300" height="400"
style="fill:#999900;fill-opacity:0.5;filter:url(#filterBlur)" />
</svg>
Questa mostra due rect
s che fungono da “pulsanti” che cambiano il colore di un cerchio. Gli ulteriori rect
e la sfocatura e l'opacità servono a renderlo più lento.
Lo script:
function blue()
{
var startTime = performance.now();
document.getElementById('circle').style.fill = '#0000ff';
var endTime = performance.now();
document.getElementById('time').textContent = (endTime - startTime).toString();
}
function red()
{
var startTime = performance.now();
document.getElementById('circle').style.fill = '#ff0000';
var endTime = performance.now();
document.getElementById('time').textContent = (endTime - startTime).toString();
}
Ora quando si fa clic, un momento sarà visualizzato meno di 1 millisecondo, però, ci vuole, ovviamente, quasi un secondo (sul computer) finché non viene visualizzato in realtà il colore cambiato (dove , btw., Chrome sembra essere più veloce di Firefox).
Come posso misurare il tempo a partire dal clic e dalla fine al termine del rendering?
'requestanimationframe' sarà probabilmente tuo amico per questo. https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame – Ben
@ Ben: Grazie! Questo sembra funzionare con Chrome e Opera, ma non con FF o IE. Qualche suggerimento? – Martin
Non è possibile misurare questo utilizzando javascript all'interno di una pagina web. Dovrebbe essere fatto usando un qualche tipo di set di strumenti aggiuntivo o browser fornito. –