Performance issues with ModelUtils._coerce and coerceArray
Los mantenedores suelen responder en 4 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- javascript
- Área
- backend, performance
Línea de trabajo
Comienza en lib/model-utils.js, alrededor de las líneas 498-503, donde ModelUtils._coerce llama a coerceArray dentro de la ruta try/catch. Revisa el comportamiento de coerceArray y la carga de trabajo create-heavy descrita en el issue; después, verifica que la coerción conserve el comportamiento existente sin el coste repetido de las excepciones y confirma la mejora mediante profiling.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
The way ModelUtils._coerce uses coerceArray is inefficient, and is causing it to show up as 20% of my application's CPU usage in profiler runs under a create heavy workload.
The problem code is this in juggler:
try {
// Coerce val into an array if it resembles an array-like object
val = coerceArray(val);
} catch (e) {
// NOOP when not coercable into an array.
}
Throwing and catching an error is much more expensive than returning a value, and nearly every call to _coerce hits this try/throw/catch path.

A variant of coerceArray that doesn't throw, but instead returns [arrayVal | undefined, coerced: boolean] I think would fix the performance problem here.
Logs
No response
Additional information
No response
Reproduction
design issue
- Lenguaje dominante
- TypeScript
- Estrellas
- 5.1k
- Forks
- 1.1k
- Merge medio
- 5 d 9 h
- PR fusionados (30 d)
- 27
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de loopbackio/loopback-next
-
Docs good first issue help wanted
Dificultad 1/5 1-3 horas Aptitud para principiantes 68/100
loopbackio/loopback-next#683 · 3 comentarios ·
Los mantenedores suelen responder en 4 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 55/100
loopbackio/loopback-next#11726 ·
Los mantenedores suelen responder en 4 días
-
bug
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
loopbackio/loopback-next#11500 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 4 días
-
@param.array throws INVALID_PARAMETER_VALUE:must be string if more than 20 elements are sentAbiertobug
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
loopbackio/loopback-next#11412 · 1 comentario ·
Los mantenedores suelen responder en 4 días
-
Query parameter array parsing broken for >20 items after qs upgrade (CVE fix side effect)Quizá libre de nuevo @KauanAfonso la tomó hace 122 días y no hay ningún pull request abierto. Abiertobug help wanted
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
loopbackio/loopback-next#11396 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 4 días
Todos los issues de loopbackio/loopback-next
Issues similares
-
chore v2
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
modelcontextprotocol/servers#5115 ·
Los mantenedores suelen responder en 1 día
-
beginner bug good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
philaconvalley/website#168 ·
Los mantenedores suelen responder en 1 día
-
bug frontend good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
oss-slu/lrda_mobile#294 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
hatchet-dev/hatchet#5179 ·
Los mantenedores suelen responder en 1 día