0

我有一个在浏览器 (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 的经验很少。

4

3 回答 3

1

我建议每秒轮询一次。
你真的需要即时反应吗?

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

setTimeout(pollForEvents, 1000);
于 2010-08-29T21:15:36.587 回答
1

从 1 秒开始,然后,看看你的反应如何。

如果您需要更快,请减少超时时间,但是,您可能会发现低于 20-50 毫秒您不会得到任何改进,因为操作系统和时间片,因此线程可以获得足够的时间。

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

但是,这真的取决于用户体验,这是主观的。一个人可以接受的事情在其他人看来可能很慢。

所以,找到你认为合适的值,然后请朋友尝试一下,看看他们对反应的看法。如果没有任何好处,仅仅因为可以而加快速度是没有意义的。

于 2010-08-29T21:35:01.863 回答
0

这取决于 - 您希望 ActiveX 对象响应的速度。- 保持 CPU 忙碌的其他因素(flash 动画、其他轮询函数)

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

于 2010-08-29T21:39:28.570 回答