Nicholas C. Zakas「What determines that a script is long-running?」
NCZOnlineのエントリ
What determines that a script is long-running?
jsがブラウザで走りっぱなしなときに出るあのダイアログについて。
以下斜め読んだ内容
- jsが長時間実行されるとき
- 設計がまずいというサイン。Jsの作者は実行されてるコードが悪い。色々いわれる
- 各ブラウザであのダイアログが出るときの条件について調べてみる。
- IEの場合
- 実行される「文の数」が閾値に達したとき
- 選択肢は、止めるか続行の2つ
- 閾値のデフォルトは500万行。閾値はレジストリいじれば変更できる
- ダイアログ表示中は、jsの実行は中断してる
- Fxの場合
- スクリプトの実行時間が閾値を超えるとダイアログ表示
- デフォルトは、10秒。about:configで変更できる
- 選択肢は、止める、デバッガでスクリプトを見る、続行の3つ
- IEよりダイアログの説明文が親切。
- Safariの場合
- Fxと同じく実行時間でダイアログ表示
- 閾値は5秒、らしい
- エントリの人がWebkitのソース調べた限りでは
- 選択肢は、止める、続行の2つ。
- 開発メニューでダイアログを表示させなくすることもできる
- Chromeの場合
- ソース調べたけど、閾値がわからない
- 多分、実行時間を基準にして、閾値は10秒
- タブのcrash controlと関連してる。
- ダイアログの中身がたちが悪い。ボタンが分かりにくい
- 「Wait」を押すと、scriptの実行は、次のスクリプトの実行時間になるまで中断。
- 「Kill Page」を押すと、ページ内容が破棄される。
- ソース調べたけど、閾値がわからない
- Operaの場合
- 閾値の制限がない。実行され続ける
- ダイアログの出方はブラウザそれぞれだけど、ユーザに見せるべきものじゃない
- ユーザが目にすることのないようなサイト作り大事
- リリースするまえに、テストを各ブラウザでやるべき
- 実行に100ms以上かかるスクリプトがあったら、パフォーマンスに問題あり
- IEをベースラインのブラウザに設定して、テストしましょう
- IEのJSはクソ重いから、IEで解決したら、他のブラウザでも直る