Я работаю над очень чувствительным к времени приложением, которое использует нажатия клавиш для ввода пользователем. Как я говорю миллисекунды здесь, я пошел вперед и попытался версию так:Javascript keydown timing
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 i = 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();
});
<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" />
И это прекрасно работает, как правило, к югу от 5мс таймеры (просто удерживая клавишу). Но как только я модифицирую код для отображения изображения (раскомментируя две строки), это замедляется до 30 мс.
Может кто-нибудь указать мне направление, почему именно так и как избежать этой дополнительной задержки?
Благодаря
Можете ли вы предоставить jsfiddle? – artm
Замечание: почти нет причин передавать строки в 'setTimeout' /' setInterval' и несколько причин * not * to. Вместо этого передайте ссылку на функцию, которую вы хотите вызвать: 'setTimeout (start, 1000);' –
jsfiddle, похоже, не работает из-за setTimeout? По крайней мере, я не мог заставить его работать раньше, извините. Прохождение строки происходит из-за моего подхода к передаче нескольких функций/действий в исходном скрипте, например. отображение div, изменение его содержимого и т. д. Это различные действия, соединенные вместе. Изменить: действия очень переменные, поэтому нет способа иметь определенную функцию для каждого. –