ホームページ > バックエンド開発 > PHPチュートリアル > javascript - js 再帰関数、500 回以上実行するとスタック オーバーフロー エラーが報告されますか?

javascript - js 再帰関数、500 回以上実行するとスタック オーバーフロー エラーが報告されますか?

WBOY
リリース: 2016-09-19 09:16:34
オリジナル
1272 人が閲覧しました

1. PHP 開発では、1700 を超える XML ファイル データを読み取り、データベースに保存する必要があります。私の方法は、フロントエンドで js 関数の再帰を使用し、AJAX を通じて一度に 1 つずつ送信することです。現在の問題は、js の再帰関数が約 500 回実行され、ブラウザがスタック オーバーフロー エラーを報告して実行を停止することです。
2. フロントエンド再帰関数:
function update_hotelInfo_queue(data,i)

リーリー

3. このエラーは、現在の再帰が無限ループであるとブラウザが判断したために発生します。
4. エラー情報の補足
javascript - js 再帰関数、500 回以上実行するとスタック オーバーフロー エラーが報告されますか?

JS初心者、アドバイスお願いします~~

返信内容:

1. PHP 開発では、1700 を超える XML ファイル データを読み取り、データベースに保存する必要があります。私の方法は、フロントエンドで js 関数の再帰を使用し、AJAX を通じて一度に 1 つずつ送信することです。現在の問題は、js の再帰関数が約 500 回実行され、ブラウザがスタック オーバーフロー エラーを報告して実行を停止することです。
2. フロントエンド再帰関数:
function update_hotelInfo_queue(data,i)

リーリー

3. このエラーは、現在の再帰が無限ループであるとブラウザが判断したために発生します。
4. エラー情報の補足
javascript - js 再帰関数、500 回以上実行するとスタック オーバーフロー エラーが報告されますか?

JS初心者、アドバイスお願いします~~

「テールコールの最適化」 http://www.ruanyifeng.com/blo...

再帰関数の利点は、コードを簡潔にし、より少ないコードでより多くのことを実行できることです。

しかし、メモリを消費するという大きな欠点があります。関数が呼び出されるたびに、进栈,函数执行完后,内存释放,叫出栈と呼ばれるメモリの一部が消費されることがわかっています。

再帰関数が再帰するたびに、出力される前に次の再帰の結果に依存します。このように、関数はポップアウトされることなく常にスタックにプッシュされ、メモリは常に占有され、解放されません。時間

したがって、あなたのエラーレポートはスタックオーバーフローに変換されます。

解決策は簡単です。ループを使用することをお勧めします。ループが実行されるたびに、誰にも頼らずに自動的にメモリが解放されます

再帰アルゴリズムを調整して再帰末尾呼び出しを実装します

再帰はまったく必要ありません。ループを使用してください。末尾再帰は js では役に立たず、最適化されていないようです。

Ajax の依存関係コールバックは Promise-deferd を使用する必要がありますが、データが 1,700 個以上あります。このメソッドを使用してもよろしいですか?

以前の方法である再帰を使用する場合は、バッチで実行できるかどうかを確認してください。

ループが使用できる場所では再帰を使用しないでください。再帰は、ハノイ塔などの問題を解決するためにループ アルゴリズムが使用されるケースを解決するために使用されます。再帰の代償はスタックオーバーフローです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート