2010-08-29 2 views
0

У меня есть объект ActiveX (у которого есть исходный код), работающий в браузере (IE). Объект ActiveX имеет пользовательский интерфейс, который вызывает события. Я хочу ответить на эти события в браузере.Что такое хороший интервал setTimeout для опроса в IE?

Я не хочу вызывать функции 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, который либо возвращает уже кэшированную строку, либо возвращает null.

Я бы хотел опросить часто: так, что браузер (на самом деле JavaScript) быстро отвечает на события пользовательского интерфейса в объекте ActiveX.

100 мсек слишком мало? Как насчет 50 мсек?

С интервалом в 100 мсек я вижу только 1% загрузки процессора в браузере: но это только на моей машине. А вообще вообще (настольные mchines работают с IE)?

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

ответ

1

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

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

setTimeout(pollForEvents, 1000); 
+0

Не могу ли я чаще опросить? Если нет, то почему нет, или в каких обстоятельствах я не должен? Когда пользователь щелкает что-то в объекте ActiveX, я хотел бы, чтобы другие вещи на странице отвечали на этот пользовательский ввод «по-видимому мгновенно» (так что небольшая часть секунды). – ChrisW

+0

С одной стороны, я считаю, что все более частые будут мешать механизмам энергосбережения. – SLaks

+0

«Вам действительно нужны мгновенные реакции?» Обычно, когда я пишу пользовательский интерфейс, я проектирую/предпочитаю, чтобы он был быстрым/отзывчивым. В противном случае пользователь нажимает что-то, ничего не происходит, и они похожи на «???». – ChrisW

1

Начать с 1 второй, затем посмотреть, как ваш ответ.

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

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

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

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

+0

100 мсек эффективно мгновенно (меньше времени реакции на руку человека), 200 мс является быстрым, но заметным, а 1000 msec - цельное сердцебиение или даже дольше. Предусматриваете ли вы какие-либо проблемы с помощью 100 мс? – ChrisW

+0

@ChrisW - Я без проблем использовал 50 мс, и для некоторых браузеров я использовал 20 мс без каких-либо проблем, поэтому 100ms должно быть хорошо, но это будет зависеть от того, что еще происходит со страницей. Например, таймер с 1 секундой должен составлять около 500 мс для точного учета времени. –

+0

OK, спасибо. Мое предпочтение было бы обработчиком событий вместо опроса; но безопасность .NET не позволит мне звонить изнутри объекта через интерфейс ActiveX (я полагаю, он не знает, что то, что работает на другой стороне интерфейса, является «безопасным» JavaScript, а не неуправляемым кодом). – ChrisW

0

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

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

Смежные вопросы