Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Performance issues with ModelUtils._coerce and coerceArray

Abierto
#9,501 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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

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

bug
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.

image

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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de loopbackio/loopback-next

Todos los issues de loopbackio/loopback-next

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.