質問:
Promise チェーンを再帰的に構築すると大量のメモリが得られるか
答え:
いいえ、リゾルブ チェーン (通常の Promise チェーンではない) を再帰的に構築してもメモリ スパイクは発生しません。一時的に大量の Promise が作成されますが、最も内側の Promise が解決されると、それらはガベージ コレクションされる可能性があります。これは時間の経過とともに徐々に発生し、空間と時間の複雑さが一定になります。
詳細:
通常の Promise チェーンでは、Promise が順番に作成され、解決されます。メモリスパイクに。ただし、解決チェーンでは、すべての Promise は同じ値で解決されます。これにより、中間 Promise をできるだけ早くガベージ コレクションできるようになります。
Promise Chain Optimization との比較:
Bluebird などのライブラリは、メモリのスパイクを回避するための反復ヘルパーを提供します。通常の約束チェーンに関連付けられています。ただし、これらの手法はチェーンの解決には適用されません。
ライブラリの違い:
Promise ライブラリが異なると、チェーンの解決方法が異なります。 ES6 仕様では、解決呼び出しごとに Promise が値を検査する必要があるため、最適化が妨げられます。これは、一部の実装では他の実装よりもメモリ消費量が多い可能性があることを意味します。
非同期再帰に関する考慮事項:
動的条件を伴う非同期ループには再帰解決チェーンが必要です。リークしている Promise 実装が使用されている場合は、メモリの問題を軽減するためにコールバックと遅延アンチパターンの使用に戻すことをお勧めします。
以上が再帰的な Promise チェーンにより過剰なメモリ消費が発生する可能性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。