Что такое хороший интервал setTimeout для опроса в IE? - PullRequest
0 голосов
/ 30 августа 2010

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

1 голос
/ 30 августа 2010

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

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

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

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

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

1 голос
/ 30 августа 2010

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

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

setTimeout(pollForEvents, 1000);
0 голосов
/ 30 августа 2010

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

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

...