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