Promise.all-Speicherverbrauch: Eine umfassende Lösung
In diesem Fall ergibt sich das Problem aus einer beträchtlichen Anzahl (58.000) von Versprechen bereit, gelöst zu werden. Während jedes Versprechen auf seine Erfüllung wartet, sammeln sich die zugehörigen asynchronen Funktionen und Ergebnisdaten an, was schließlich zu einem übermäßigen Speicherverbrauch führt.
Effiziente Versprechenverwaltung
Um die Speichernutzung zu optimieren, vermeiden Sie eine große Anzahl von Versprechen und deren Daten gleichzeitig im Speicher halten. Begrenzen Sie stattdessen die Anzahl gleichzeitiger Vorgänge (Versprechen) auf einen angemessenen Wert (als „X“ bezeichnet). Wenn der Ratenbegrenzer beispielsweise 20 Anfragen pro Sekunde zulässt, könnte die Einstellung von zur Durchsetzung der Parallelitätskontrolle:
1. Promise.map() mit Parallelitätsoption:
Bluebirds Promise.map() bietet eine Parallelitätsoption, die es ermöglicht, die maximale Anzahl gleichzeitiger Vorgänge anzugeben. Dies vereinfacht den Prozess der Verwaltung der Parallelität.2. Manuelle Promise-Verwaltung:Alternativ können Sie benutzerdefinierten Code implementieren, um die Parallelität zu verwalten. Das folgende Beispiel veranschaulicht diesen Ansatz:
3. Platzhalterersetzung:
function mapConcurrent(items, maxConcurrent, fn) { // Limit concurrent operations to `maxConcurrent` let inFlightCntr = 0; return new Promise((resolve, reject) => { function runNext() { let i = index; let prom = fn(items[index], index++).then(...); inFlightCntr++; prom.finally(() => { inFlightCntr--; }); prom.then(...); // Run resolve/reject based on returned promise } function run() { // Process items while count is below the limit while (inFlightCntr < maxConcurrent && index < items.length) { runNext(); } // Resolve or reject parent promise based on completion } run(); }); }
Das obige ist der detaillierte Inhalt vonWie kann der Speicherverbrauch effizient verwaltet werden, wenn „Promise.all' mit einer großen Anzahl von Versprechen verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!