Olá k, até posso compartilhar mas o trecho nao fará sentido algum sem todo o contexto que ele se encontra, aqui está a parte que mensurei no post, foi por volta desse promise all:
await Promise.all(
proposals.map(async (proposal) => {
// Taxa
if (proposal.proposalTax.length) {
chargeIds.push({
pagarMeChargeId: proposal.proposalTax[0].pagarMeChargeId,
pagarMeUsed: proposal.proposalTax[0].pagarMeUsed,
})
}
// PropostaPayments
const proposalPayments = await ProposalPayments.query()
.preload('proposalBoletoParcelado')
.where('proposal_id', proposal.$attributes.id)
.andWhereNotNull('pagar_me_order_id')
if (proposalPayments && proposalPayments.length) {
await Promise.all(
proposalPayments.map(async (pp) => {
// Boleto Parcelado
if (pp.proposalBoletoParcelado && pp.proposalBoletoParcelado.length) {
await Promise.all(
pp.proposalBoletoParcelado.map((proposalBoletoParcelado) => {
chargeIds.push({
pagarMeChargeId: proposalBoletoParcelado.pagarMeChargeId,
pagarMeUsed: proposalBoletoParcelado.pagarMeUsed,
})
})
)
}
chargeIds.push({
pagarMeChargeId: pp.pagarMeChargeId!,
pagarMeUsed: proposal.pagarMeUsed,
})
})
)
}
// PropostaPayments
const proposalCardMemberships = await ProposalCardMemberships.query()
.preload('proposalCardCycles')
.where('proposal_id', proposal.$attributes.id)
if (proposalCardMemberships && proposalCardMemberships.length) {
await Promise.all(
proposalCardMemberships.map(async (pcm) => {
// Ciclos
if (pcm.proposalCardCycles && pcm.proposalCardCycles.length) {
await Promise.all(
pcm.proposalCardCycles.map((pcc) => {
if (!pcc.pagarMeChargeId) return
chargeIds.push({
pagarMeChargeId: pcc.pagarMeChargeId,
pagarMeUsed: pcm.pagarMeUsed,
})
})
)
}
})
)
}
})
)
Estou esperando um tempo livre para tentar reproduzi-lo e em breve posto aqui minhas conclusoes.
de cara no ultimo teste que fiz, tive resultados negativos quanto ao promisse.all()
.
import { createServer } from 'node:http'
import { performance } from 'node:perf_hooks'
const app = createServer()
app.on("request", async (_, response) => {
const casas = Array(100).fill({
pessoas: Array(100).fill({
bicicletas: Array(100).fill({
cor: ""
})
})
})
const map = () => {
let list = []
performance.mark("mapStart")
casas.map(casa => casa.pessoas.map(pessoa => pessoa.bicicletas.map(bicicleta => list.push(bicicleta.cor))))
performance.mark("mapEnd")
performance.measure("map", "mapStart", "mapEnd")
}
const forof = () => {
let list = []
performance.mark("forofStart")
for (const casa of casas) {
for (const pessoa of casa.pessoas) {
for (const bicicleta of pessoa.bicicletas) {
list.push(bicicleta.cor)
}
}
}
performance.mark("forofEnd")
performance.measure("forof", "forofStart", "forofEnd")
}
const all = async () => {
let list = []
performance.mark("allStart")
await Promise.all(
casas.map(async casa => {
await Promise.all(
casa.pessoas.map(async pessoa => {
await Promise.all(
pessoa.bicicletas.map(bicicleta => list.push(bicicleta.cor))
)
})
)
})
)
performance.mark("allEnd")
performance.measure("all", "allStart", "allEnd")
}
map()
forof()
await all()
console.log(performance.getEntriesByType("measure"))
response.end("ok")
})
app.listen(3333)
resultados:
[
PerformanceMeasure {
name: 'map',
entryType: 'measure',
startTime: 3310.392207,
duration: 33.59345100000019
},
PerformanceMeasure {
name: 'forof',
entryType: 'measure',
startTime: 3344.32724,
duration: 29.174007000000074
},
PerformanceMeasure {
name: 'all',
entryType: 'measure',
startTime: 3373.629408,
duration: 302.93898400000035
}
]