- fatta ottimizzazione della funzione addExtraInfo, chiamando parallelamente tutte le promise...

This commit is contained in:
Surya Paolo
2025-03-13 12:48:23 +01:00
parent 0017f04e45
commit f32bd189dc
4 changed files with 136 additions and 92 deletions

View File

@@ -1822,6 +1822,46 @@ router.get('/loadsite/:userId/:idapp/:vers', authenticate_noerror_WithUserLean,
}
});
async function measurePromises(promises) {
const keys = Object.keys(promises);
const timings = {}; // memorizza il tempo per ogni promise
const startTotal = process.hrtime(); // tempo iniziale totale
// Avvolgo ogni promise per misurare il tempo
const wrappedPromises = keys.map(key => {
const promise = promises[key];
return (async () => {
const start = process.hrtime(); // inizio timer per questa promise
const result = await promise;
const diff = process.hrtime(start);
// Calcola i secondi (precisione in nanosecondi)
const seconds = diff[0] + diff[1] / 1e9;
timings[key] = seconds;
return result;
})();
});
// Attendo tutte le promise in parallelo
const results = await Promise.all(wrappedPromises);
const diffTotal = process.hrtime(startTotal);
const totalTime = diffTotal[0] + diffTotal[1] / 1e9;
// Ricostruisco l'oggetto data con i risultati
const data = keys.reduce((acc, key, index) => {
acc[key] = results[index];
return acc;
}, {});
// Ordina le chiamate per tempo decrescente e prende le 10 più lente
const slowCalls = Object.entries(timings)
.sort(([, timeA], [, timeB]) => timeB - timeA)
.slice(0, 10)
.map(([key, time]) => ({ key, time }));
return { data, totalTime, slowCalls };
}
async function load(req, res, version = '0') {
try {
console.log(' ... 1) richiesta LOAD');
@@ -1922,12 +1962,18 @@ async function load(req, res, version = '0') {
};
// Esecuzione parallela di tutte le promesse
const keys = Object.keys(promises);
/*const keys = Object.keys(promises);
const results = await Promise.all(Object.values(promises));
const data = keys.reduce((acc, key, index) => {
acc[key] = results[index];
return acc;
}, {});
*/
const { data, totalTime, slowCalls } = await measurePromises(promises);
// console.log('Risultati delle promise:', data);
console.log('Tempo totale di esecuzione:', totalTime, 'secondi');
console.log('Le 10 chiamate più lente:', slowCalls);
// Aggiornamento delle informazioni dell'utente, se presente
let myuser = req.user;