6

次の jsFiddle を考えると、これは単純なインクリメント カウンターです。

http://jsfiddle.net/C93ms/6/

....モバイル デバイス (スマートフォンまたはタブレット) を使用して上記の URL にアクセスすると、JavaScript がサポートされていれば、期待どおりにカウンターが増加し始めます。 " ボタンを押すか、電源ボタンを 1 回クリックして画面をオフにします (ただし、電話機の電源はオンのままにします)。スクリプトの実行が停止し、カウンターの増加が停止します。これは私が予想することであり、モバイル デバイスではバッテリ寿命を確保することが非常に重要であるため、UI スレッドがスリープするなどの理由があることを理解しています。ブラウザーに再度アクセスすると、カウンターは増加し続けます。現実の世界では、JavaScript を使用してタイムアウト期間を決定する Web サイトは、非アクティブ期間にもかかわらずタイムアウトしないと想定しています。

また、これはデバイス、ファームウェア、ソフトウェアによっても異なると想定しています。ここで確認しようとしているのは、モバイル開発フレームワークに組み込まれた標準的なアプローチまたはデフォルトの動作があるかどうか、およびどのようにデバイスが動作します。

ここで良い質問をしたかどうかは完全にはわかりませんが、SO から 100% 関連する情報を見つけるのに苦労したか、検索時に何を質問する必要があるかよくわかりません。

4

1 に答える 1

10

どの JavaScript フレームワークも、基盤となる JS エンジンの実行を停止したり、動作を変更したりすることはできません。彼らは影響を与えることができませんsetTimeout

それでも、動作はWindowTimersインターフェイスの現在の HTML5 ドラフトで標準化されています(これは、そのように実装されたという意味ではありません)。そこにメモがあります:

この API は、タイマーがスケジュールどおりに正確に実行されることを保証しません。CPU 負荷、その他のタスクなどによる遅延が予想されます。

そして、さらに明確に:

9) 必要に応じて、さらにユーザー エージェントが定義した時間待機します。

注: これは、デバイスの電力使用を最適化するために、ユーザー エージェントが必要に応じてタイムアウトをパディングできるようにすることを目的としています。たとえば、一部のプロセッサには、タイマーの粒度が減少する低電力モードがあります。そのようなプラットフォームでは、ユーザー エージェントは、関連するより高い電力使用量でより正確なモードを使用するようにプロセッサに要求する代わりに、このスケジュールに合わせてタイマーを遅くすることができます。

このような動作は、4 ミリ秒の最小タイムアウトを実装するデスクトップ ブラウザーでも確認できます ( MDN の説明を参照してください)。したがって、すべてのデバイス/ソフトウェア/ファームウェアが、必要と思われる場合にのみそのような実行を停止することは正当です。

WindowAnimationTiming下書きもご覧になることをお勧めします。

また、アニメーション/時計などで / を使用する場合は、常にオブジェクトを使用して実際に経過した時間を測定しsetIntervalます(: を介して)。setTimeoutDateDate.now()

于 2012-05-24T15:27:09.057 に答える