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();
}

適切なポーリング間隔は?

確かではありませんが、作業量は少ないと思います。既にキャッシュされた文字列を返すか、null を返す ActiveX オブジェクトのメソッドを呼び出すだけです。

頻繁にポーリングしたいと思います。これにより、ブラウザー (実際には JavaScript) が ActiveX オブジェクトの UI イベントに迅速に応答するように見えます。

100 ミリ秒は小さすぎますか? 50ミリ秒くらい?

100 ミリ秒の間隔で、ブラウザの CPU 使用率は 1% しか表示されませんが、それは私のマシンだけです。一般的にはどうですか(IEを実行しているデスクトップマシン)?

これがネイティブ スレッドである場合、50 ミリ秒ごとに起動することを心配する必要はありませんが、IE で JavaScript を実行した経験はほとんどありません。

4

3 に答える 3

1

1秒から始めて、あなたの反応を見てください。

より速くする必要がある場合は、タイムアウト期間を減らしますが、20 ~ 50 ミリ秒未満では、OS とタイムスライスのために改善が得られないため、スレッドは十分な時間を得ることができます。

操作を実行するのに 1 ミリ秒かかり、より高速になる可能性がある場合は、ほとんどの時間を睡眠に費やします。

しかし、それは実際にはユーザー エクスペリエンスに帰着し、それは主観的なものです。ある人にとっては許容できるものでも、他の人にとっては遅く見えるかもしれません。

ですから、あなたが適切だと思う値を見つけて、友人にそれを試してもらい、その反応についてどう思うか見てみましょう。メリットがなければ、できるからといって速くしても意味がありません。

于 2010-08-29T21:35:01.863 に答える
1

毎秒 1 回のポーリングをお勧めします。
瞬時の反応が本当に必要ですか?

また、文字列を に渡すべきではありませんsetTimeout
代わりに、htis のように関数自体を渡す必要があります。

setTimeout(pollForEvents, 1000);
于 2010-08-29T21:15:36.587 に答える
0

それは、ActiveX オブジェクトの応答速度に依存します。- CPU をビジー状態に保つその他の要因 (フラッシュ アニメーション、その他のポーリングされた機能)

他の要因により、間隔の値は実際の値を反映していません。したがって、あなたのマシンではより低い値が正しいように見えるかもしれませんが、他のクライアントでは確実性を確信することはできません. 間隔をできるだけ長くすることをお勧めします。1秒あれば十分です。

于 2010-08-29T21:39:28.570 に答える