我有一个在浏览器(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的经验。
答案 0 :(得分:1)
我建议每秒进行一次投票 你真的需要瞬间反应吗?
此外,您不应将字符串传递给setTimeout
相反,你应该传递函数本身,如htis:
setTimeout(pollForEvents, 1000);
答案 1 :(得分:1)
从1秒开始,然后看看你的回答是怎样的。
如果您需要更快,减少超时时间,但是,您可能会发现在20-50ms之内,由于操作系统和时间限制,您将无法获得任何改进,因此线程可以获得足够的时间。
我怀疑你会看到很多cpu利用率,如果你没有做太多,因为,如果它需要1ms才能完成操作,而且它可能更快,那么你花费大部分时间睡觉,为此。
但是,它真正归结为用户体验,这是主观的。一个人可能接受的东西对其他人来说似乎很慢。
所以,找到你认为合适的价值,然后让朋友试一试,看看他们对反应的看法。如果没有任何好处,没有必要加快进度。
答案 2 :(得分:0)
这取决于 - 您希望ActiveX对象响应的速度有多快。 - 使CPU忙碌的其他因素(闪存动画,其他轮询功能)
由于其他因素,间隔值不会反映实际值。因此,在您的机器中,较低的值似乎是正确的,但您无法确定其他客户的确定性。我建议你尽可能多地增加间隔。如果一秒钟就够了,那很好。