У меня есть объект ActiveX (который у меня есть исходный код) работает в браузере (IE). Объект ActiveX имеет пользовательский интерфейс, который вызывает события. Я хочу отвечать на эти события в браузере.
Я не хочу вызывать функции JavaScript из событий объекта ActiveX: и поэтому вместо этого я хочу, чтобы JavaScript опрашивал метод объекта ActiveX (например, «есть ли у вас какие-либо события для отчета?»).
Я сделаю это с помощью такого кода:
function findActiveXObject() {
return document.getElementById('MyActiveXObject');
}
function startPolling() {
setTimeout('pollForEvents()', 100);
}
function pollForEvents() {
var activeXObject = findActiveXObject();
var eventMsg = activeXObject.PollForEvent();
if (eventMsg != null)
{
//do something with the event
alert(eventMsg);
}
//poll again soon
startPolling();
}
Какой хороший интервал опроса?
Я думаю, хотя я не уверен, что объем работы невелик: он просто вызывает метод объекта ActiveX, который либо возвращает уже кэшированную строку, либо возвращает ноль.
Я хотел бы часто опрашивать: чтобы браузер (на самом деле JavaScript) быстро реагировал на события пользовательского интерфейса в объекте ActiveX.
100 мсек слишком мало? Как насчет 50 мс?
С интервалом 100 мсек я вижу только 1% загрузки процессора в браузере, но это только на моей машине. А что вообще (настольные машины работают под управлением IE)?
Если бы это был нативный поток, я бы не беспокоился о том, чтобы разбудить его каждые 50 мсек, но у меня мало опыта работы с JavaScript в IE.
3 ответа
Я бы рекомендовал проводить опрос один раз в секунду.
Вам действительно нужны мгновенные реакции?
Кроме того, вы не должны передавать строку в setTimeout
.
Вместо этого вы должны передать саму функцию, например, htis:
setTimeout(pollForEvents, 1000);
Это зависит от того, насколько быстро вы хотите, чтобы объект ActiveX отвечал. - другие факторы, которые загружают процессор (флэш-анимация, другие опрашиваемые функции)
Интервальные значения не отражают фактические значения из-за других факторов. Таким образом, на вашем компьютере более низкие значения могут показаться правильными, но вы не можете быть уверены в достоверности других клиентов. Я рекомендую вам увеличить интервал как можно больше. Если одной секунды достаточно, это нормально.
Начните с 1 секунды, затем посмотрите, каков ваш ответ.
Если вам это нужно быстрее, сократите время ожидания, но вы можете обнаружить, что ниже 20-50мс вы не получите никаких улучшений из-за операционной системы и временного среза, поэтому потоки могут получить достаточное время.
Я сомневаюсь, что вы увидите, как сильно загружается процессор, если вы не делаете много, например, если для выполнения операции требуется 1 мс, а это может быть быстрее, то вы тратите большую часть времени на сон для этого.
Но это действительно сводится к пользовательскому опыту, и это субъективно. То, что может быть приемлемо для одного человека, может показаться кому-то медленным.
Итак, найдите то, что вы считаете подходящим значением, затем попросите друзей попробовать его и посмотреть, что они думают об ответе. Нет смысла идти быстрее только потому, что ты можешь, если нет пользы.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.