У меня есть объект 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.

0
ChrisW 30 Авг 2010 в 01:11

3 ответа

Лучший ответ

Я бы рекомендовал проводить опрос один раз в секунду.
Вам действительно нужны мгновенные реакции?

Кроме того, вы не должны передавать строку в setTimeout.
Вместо этого вы должны передать саму функцию, например, htis:

setTimeout(pollForEvents, 1000);
1
SLaks 29 Авг 2010 в 21:21

Это зависит от того, насколько быстро вы хотите, чтобы объект ActiveX отвечал. - другие факторы, которые загружают процессор (флэш-анимация, другие опрашиваемые функции)

Интервальные значения не отражают фактические значения из-за других факторов. Таким образом, на вашем компьютере более низкие значения могут показаться правильными, но вы не можете быть уверены в достоверности других клиентов. Я рекомендую вам увеличить интервал как можно больше. Если одной секунды достаточно, это нормально.

0
Zafer 29 Авг 2010 в 21:39

Начните с 1 секунды, затем посмотрите, каков ваш ответ.

Если вам это нужно быстрее, сократите время ожидания, но вы можете обнаружить, что ниже 20-50мс вы не получите никаких улучшений из-за операционной системы и временного среза, поэтому потоки могут получить достаточное время.

Я сомневаюсь, что вы увидите, как сильно загружается процессор, если вы не делаете много, например, если для выполнения операции требуется 1 мс, а это может быть быстрее, то вы тратите большую часть времени на сон для этого.

Но это действительно сводится к пользовательскому опыту, и это субъективно. То, что может быть приемлемо для одного человека, может показаться кому-то медленным.

Итак, найдите то, что вы считаете подходящим значением, затем попросите друзей попробовать его и посмотреть, что они думают об ответе. Нет смысла идти быстрее только потому, что ты можешь, если нет пользы.

1
James Black 29 Авг 2010 в 21:35