IE中轮询的setTimeout间隔是多少?

时间:2010-08-29 21:11:33

标签: javascript internet-explorer polling setinterval

我有一个在浏览器(IE)中运行的ActiveX对象(我有源代码)。 ActiveX对象具有UI,用于引发事件。我想在浏览器中回复这些事件。

我不想从ActiveX对象事件中调用JavaScript函数:因此,我希望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对象中的UI事件。

100毫秒太小了吗? 50毫秒怎么样?

如果间隔为100毫秒,我在浏览器中只看到1%的CPU利用率:但这只是在我的机器上。一般情况下(桌面机器运行IE)?

如果这是本机线程,我不会担心每50毫秒唤醒它,但我没有在IE中运行JavaScript的经验。

3 个答案:

答案 0 :(得分:1)

我建议每秒进行一次投票 你真的需要瞬间反应吗?

此外,您不应将字符串传递给setTimeout 相反,你应该传递函数本身,如htis:

setTimeout(pollForEvents, 1000);

答案 1 :(得分:1)

从1秒开始,然后看看你的回答是怎样的。

如果您需要更快,减少超时时间,但是,您可能会发现在20-50ms之内,由于操作系统和时间限制,您将无法获得任何改进,因此线程可以获得足够的时间。

我怀疑你会看到很多cpu利用率,如果你没有做太多,因为,如果它需要1ms才能完成操作,而且它可能更快,那么你花费大部分时间睡觉,为此。

但是,它真正归结为用户体验,这是主观的。一个人可能接受的东西对其他人来说似乎很慢。

所以,找到你认为合适的价值,然后让朋友试一试,看看他们对反应的看法。如果没有任何好处,没有必要加快进度。

答案 2 :(得分:0)

这取决于   - 您希望ActiveX对象响应的速度有多快。   - 使CPU忙碌的其他因素(闪存动画,其他轮询功能)

由于其他因素,间隔值不会反映实际值。因此,在您的机器中,较低的值似乎是正确的,但您无法确定其他客户的确定性。我建议你尽可能多地增加间隔。如果一秒钟就够了,那很好。