Javascript setInvervalが遅いようですか?

javascript
Javascript setInvervalが遅いようですか?

そのため、ページ上の何かの配置をチェックするsetIntervalを実行しようとしています。 私が持っている問題は、10、100、250に設定すると、非常に遅くなり、スクロールダウンが遅くなるということです。

setInterval('functionName()', 10);
setInterval('functionName()', 100);
setInterval('functionName()', 250);
  • UPDATE:*この関数の理由は、ユーザーがスクロールしたときに要素をページの下に移動することです。 問題は、iFrame内のFacebookアプリであり、画面よりも大きいことです。 iFrameの外部のonScrollプロパティをFacebookにアタッチする方法が見つからないようです(または、できますか?!? 私はまだ運がなかったので、この方法を使用せざるを得ません。 基本的に、Facebookが渡すスクロールの高さを取得し、要素をページの下に移動します。 それは動作しますが、スクロールダウンしても遅くなるようです。

これは回避できないものですか?

  1  0


ベストアンサー

あなたは10msごとに何かをしている。 これは、ブラウザの通常の動作を妨げる可能性があります。 JavaScriptが実行されているときは常に、ブラウザインターフェイスがブロックされます。

おそらく、インターバルタイマーで何をしようとしているのかを説明し、コードを投稿する場合は、それを行うためのより良い実行方法を提案できます。

4


`setInterval()`と `setTimeout()`の最小時間分解能はブラウザによって異なり、場合によっては15ミリ秒または20ミリ秒になることがあります(記事によっては最大75ミリ秒)。 より高い解像度(より短い間隔)でアクションを実行しようとする試みは、実際にはブラウザーへの要求に近いものであり、保証はありません。 ブラウザの機能よりも高い解像度でのリクエストは「クランプ」され、その最小値よりも頻繁に実行されません。 もちろん、ブラウザのワークロードが十分に高い場合(継続的に呼び出される機能が保証される可能性が高いため)、間隔は大幅に長くなる可能性があります。

補足として、関数の引数を `setInterval()`に文字列として提供しないことが最善です。 これを行うと、その関数がグローバルスコープで評価されます。 これの代わりに:

setInterval('functionName()', 10);

これを使用する必要があります:

setInterval(functionName, 10);

関数を頻繁に実行する必要性を再検討する必要があります。 おそらく、イベント駆動型の代替手段があります。

参照:http://www.sitepoint.com/creating-accurate-timers-in-javascript/ [最小遅延のMDN]

2


JavaScriptは、まさにその性質上、シングルスレッドです。 つまり、JavaScriptはブラウザーのUIと同じプロセスで実行されます。

そのため、ブラウザーがJavaScriptを実行しているときはいつでも、ブラウザーが実行していること(ほとんどの場合、ブラウザーウィンドウにページを描画している可能性があります)を停止し、コードを実行する必要があります。

コードを1秒間に100回(1000/10)実行しているので、ブラウザの通常の操作を妨げるだけです!!

0


私の推測では、 `functionName()`は遅いです。 「250」は、最新のブラウザにとっては悪くないはずです。 関数を投稿すると、改善できるかどうかがわかります。

0


言及されていないこと:実際に関数オブジェクト自体を渡す必要があるときに、 `setInterval`に文字列を渡します:

setInterval(myFunction, 5000)

`” functionName() “`のような文字列を与えた場合、それは `eval’edになります。

0


タイトルとURLをコピーしました