1. PHP 開発では、1700 を超える XML ファイル データを読み取り、データベースに保存する必要があります。私の方法は、フロントエンドで js 関数の再帰を使用し、AJAX を通じて一度に 1 つずつ送信することです。現在の問題は、js の再帰関数が約 500 回実行され、ブラウザがスタック オーバーフロー エラーを報告して実行を停止することです。
2. フロントエンド再帰関数:
function update_hotelInfo_queue(data,i)
3. このエラーは、現在の再帰が無限ループであるとブラウザが判断したために発生します。
4. エラー情報の補足
JS初心者、アドバイスお願いします~~
1. PHP 開発では、1700 を超える XML ファイル データを読み取り、データベースに保存する必要があります。私の方法は、フロントエンドで js 関数の再帰を使用し、AJAX を通じて一度に 1 つずつ送信することです。現在の問題は、js の再帰関数が約 500 回実行され、ブラウザがスタック オーバーフロー エラーを報告して実行を停止することです。
2. フロントエンド再帰関数:
function update_hotelInfo_queue(data,i)
3. このエラーは、現在の再帰が無限ループであるとブラウザが判断したために発生します。
4. エラー情報の補足
JS初心者、アドバイスお願いします~~
「テールコールの最適化」 http://www.ruanyifeng.com/blo...
再帰関数の利点は、コードを簡潔にし、より少ないコードでより多くのことを実行できることです。
しかし、メモリを消費するという大きな欠点があります。関数が呼び出されるたびに、进栈
,函数执行完后,内存释放,叫出栈
と呼ばれるメモリの一部が消費されることがわかっています。
したがって、あなたのエラーレポートはスタックオーバーフローに変換されます。
解決策は簡単です。ループを使用することをお勧めします。ループが実行されるたびに、誰にも頼らずに自動的にメモリが解放されます
再帰アルゴリズムを調整して再帰末尾呼び出しを実装します
再帰はまったく必要ありません。ループを使用してください。末尾再帰は js では役に立たず、最適化されていないようです。
Ajax の依存関係コールバックは Promise-deferd を使用する必要がありますが、データが 1,700 個以上あります。このメソッドを使用してもよろしいですか?
以前の方法である再帰を使用する場合は、バッチで実行できるかどうかを確認してください。
ループが使用できる場所では再帰を使用しないでください。再帰は、ハノイ塔などの問題を解決するためにループ アルゴリズムが使用されるケースを解決するために使用されます。再帰の代償はスタックオーバーフローです。