Friday 15 May 2015

jquery - Javascript keydown timing -



jquery - Javascript keydown timing -

i working on time-sensitive application uses key presses user input. talking milliseconds here, went ahead , tried version this:

class="snippet-code-js lang-js prettyprint-override">function start() { //stim.style.display = "block"; rt_start = new date().gettime(); response_allowed = 1; } function end() { var t = rt_end - rt_start; //stim.style.display = "none"; log.innerhtml = t; i++; if (i < iterations) { settimeout('start();', 1000); } } var rt_start; var rt_end; var iterations = 100; var = 0; var response_allowed = 0; var stim; var log; $(document).ready(function() { document.onkeydown = function(e) { if (response_allowed == 1) { rt_end = new date().gettime(); response_allowed = 0; end(); } }; stim = document.getelementbyid('stim'); log = document.getelementbyid('log'); start(); }); class="snippet-code-html lang-html prettyprint-override"><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div id="log"></div> <img src="https://www.gravatar.com/avatar/cfefd93404e6b0eb3cde02b4b6df4e2b?s=128&d=identicon&r=pg&f=1" id="stim" />

and works fine, sub-5ms timers (just holding downwards key). modify code display image (uncommenting 2 lines), slows downwards lot 30ms.

can point me direction why case , how perchance avoid additional delay?

thanks

i recommend using domhighrestimestamp available (with polyfill browsers don't provide it).

it's high-resolution timestamp (designed accurate measurement in mind) used (e.g.) navigation timing , web performance apis (search in mozilla developer network, can't share more 2 links within single post).

the quick way domhighrestimestamp - much var ts = new date().gettime(); regular millisecond timestamp - is:

var ts = performance.now();

as said above, take @ web performance api @ mdn. helpful if application time-sensitive.

edit:

about snippet, seems me if hold key down, limited resolution of keydown event (which fires continuously, not every milissecond). can see behavior if press character key downwards (continuously) text editor , check how many times per sec character written. this, guess, controlled via os setting.

you limited "drift" associated settimeout/setinterval. see, settimeout queues something execution after given delay, not guarantee timely execution. it's "best effort" scenario and, if browser busy doing something, drift significantly. meaning: if utilize settimeout re-enable response_allowed variable after 1 second, can expect re-enable after "about" (but not exactly) 1 second.

javascript jquery timing onkeydown

No comments:

Post a Comment