- fatta ottimizzazione della funzione addExtraInfo, chiamando parallelamente tutte le promise...
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user