JavascriptのタイマーをsetTimeoutより正確に作成する方法はありますか?
質問
ずっと気になっていたのは、"left "セクションの中にある
setTimeout()
メソッドが予測できないことです。
私の経験では、タイマは多くの状況で恐ろしく不正確です。不正確というのは、実際の遅延時間が 250~500ms 多かれ少なかれ異なるということです。これは大きな時間ではありませんが、UI 要素を隠したり表示したりするためにそれを使用する場合、その時間は目に見えて顕著になることがあります。
を確実に実行するためにできるトリックはありますか。
setTimeout()
が正確に実行されるようにするために、(外部 API に頼ることなく)何かコツがあるのでしょうか。それとも、これは失われた原因なのでしょうか。
どのように解決するのですか?
以下のようなトリックがありますか? を確実にするために
setTimeout()
が が正確に実行されるようにするために、(外部APIに頼ることなく 外部APIに頼ることなく)正確に実行できるようにするか、それともこれは迷走しているのでしょうか?
いいえ、そうではありません。完全に正確なタイマーに近いものは
setTimeout()
- ブラウザはそのためにセットアップされているのではありません。
しかし
のように、タイミングをとるためにそれに依存する必要はありません。ほとんどのアニメーションライブラリは、何年も前にこのことを理解していました。
setTimeout()
でコールバックをセットし、何が必要かは
(new Date()).milliseconds
(または同等) の値に基づいて実行する必要があることを決定します。これにより、新しいブラウザでより信頼性の高いタイマー サポートを利用しながら、古いブラウザでも適切に動作させることができます。
また、次のようなことも可能になります。 多くのタイマーを使用することを避ける ! ここが重要なのですが、各タイマーはコールバックなのです。各コールバックは JS コードを実行します。JS コードが実行されている間、他のコールバックを含むブラウザ イベントは遅延またはドロップされます。コールバックが終了すると、他のコールバックは他のブラウザ イベントと実行の機会を争う必要があります。したがって、その間隔のすべての保留中のタスクを処理する 1 つのタイマーは、間隔が一致する 2 つのタイマーよりも性能が良く、(短いタイムアウトの場合は)タイムアウトが重なる 2 つのタイマーよりも性能が良くなります!
まとめ:
setTimeout()
を使うのをやめ、リアルタイムクロックを使ってUIアクションをスムーズにします。
関連
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 文字列が有効な数値であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptに「NULL合体」演算子はありますか?
-
[解決済み] jQueryでJavaScriptオブジェクトから選択する際に、オプションを追加する最も良い方法は何ですか?
-
[解決済み] JavaScriptで2次元の配列を作成するにはどうすればよいですか?
-
[解決済み] JavaScriptに定数はありますか?
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] javascriptで正確なタイマーを作成する方法は?
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?