[解決済み] ブラウザ Javascript スタックサイズ制限
2023-05-20 15:22:11
質問
IE ブラウザで特に、クライアント側の Javascript のスタック オーバーフロー問題が発生します。 これは、いくつかの関数呼び出しを行うサード パーティ ライブラリ内で発生しており、何らかの理由で、スタック制限が低いために IE でのみ時々ブレーキがかかります。
そこで、いくつかのブラウザのスタック サイズの制限をテストするために小さなテスト HTML を作成したところ、Windows 7 OS、8GB RAM のラップトップで動作する FF 7 または Chrome 14 と比較すると、IE8 は実際に小さなスタック制限を持っていることがわかりました。
<html>
<body>
<!-- begin Script: -->
<script type="text/javascript">
function doSomething(){
var i = 3200;
doSomethingElse(i);
}
function doSomethingElse(i){
if (i == 0) return -1;
doSomethingElse(i-1);
}
doSomething();
</script>
<!-- END OF PAGE -->
</body>
</html>
IEは3200程度の値でスタックオーバーフローが発生しますが、FirefoxやChromeはIEに比べると非常に深い再帰を処理することができます。
IE やその他のブラウザで実行中にスタックオーバーフロー例外を発生させた Javascript 関数と結びつける方法があるかどうか、また、エラーが発生した瞬間にスタック内の関数のチェーンでスタックトレースを与えることができるかどうかを知りたいのです。
どのように解決するのですか?
簡単なテストを使って
var i = 0;
function inc() {
i++;
inc();
}
try {
inc();
}
catch(e) {
// The StackOverflow sandbox adds one frame that is not being counted by this code
// Incrementing once manually
i++;
console.log('Maximum stack size is', i, 'in your current browser');
}
インターネットエクスプローラー
- IE6: 1130
- IE7: 2553
- IE8: 1475
- IE9: 20678
- IE10:20677
Mozilla Firefox
- 3.6: 3000
- 4.0: 9015
- 5.0: 9015
- 6.0: 9015
- 7.0: 65533
- 8b3: 63485
- 17: 50762
- 18: 52596
- 19: 52458
- 42: 281810
- 89: 10746
- 91: 26441
グーグルクローム
- 14: 26177
- 15: 26168
- 16: 26166
- 25: 25090
- 47: 20878
- 51: 41753
- 93: 13903
サファリ
- 4: 52426
- 5: 65534
- 9: 63444
- 14: 45606
Safari iOS
- 15: 7909
オペラ
- 10.10: 9999
- 10.62: 32631
- 11: 32631
- 12: 32631
- 78: 13908
エッジ
- 87: 13970
- 93: 13903
ヤンデックス
- 21: 13909
ご質問の件ですが、ブラウザの開発者ツールでスタックを確認してください。 IE 8+の場合、以下をヒットします。 F12 例外が発生するとブレークし、コールスタックが表示されます。 また、Chromeのデベロッパーツールを使用することもできます。 Ctrl + シフト + J .
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] Webフォームのフィールド/入力タグでブラウザのオートコンプリートを無効にするにはどうすればよいですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] Node.jsのES6クラスをrequireで作る
最新
-
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 で範囲を作成する - 奇妙な構文
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
-
[解決済み] ネストされたJavaScriptオブジェクトの反復処理 [重複] [重複