¿Qué reglas de eslint en mi configuración son lentas?

3 minutos de lectura

avatar de usuario de mik01aj
mik01aj

Tengo una configuración con alrededor de 100 reglas y ejecutar eslint en mi proyecto con todas estas reglas toma alrededor de 10 segundos. Me gustaría identificar las reglas más lentas y eliminar algunas de ellas. ¿Cómo hago esto? ¿Hay alguna herramienta de perfilado para eslint?

avatar de usuario de mysticatea
misticatea

eslint muestra los tiempos gastados de las reglas si la variable de entorno TIMING Está establecido. Por ejemplo:

$ TIMING=1 eslint lib
Rule                         | Time (ms) | Relative
:----------------------------|----------:|--------:
valid-jsdoc                  |   203.798 |     6.7%
camelcase                    |   142.146 |     4.6%
no-unmodified-loop-condition |   136.811 |     4.5%
indent                       |   127.138 |     4.2%
no-undefined                 |   124.525 |     4.1%
keyword-spacing              |    85.397 |     2.8%
space-in-parens              |    76.179 |     2.5%
no-this-before-super         |    72.317 |     2.4%
no-implied-eval              |    69.945 |     2.3%
space-infix-ops              |    57.128 |     1.9%

Consulte también los documentos oficiales sobre Rendimiento por regla.

  • ¡Vaya, es así de fácil! ¡Gracias!

    – mik01aj

    20 de julio de 2016 a las 8:12

  • Lástima que no muestra el temporizador del analizador. Estoy usando @typescript-eslint/parser y está tomando mucho tiempo, quería un punto de referencia en él.

    – Ka Mok

    6 de febrero de 2019 a las 19:05


  • De hecho, tengo el mismo problema con el @typescript-eslint/parser, con un archivo de 400 líneas tarda unos 6 segundos, las reglas actuales son comparativamente rápidas, siendo 600ms la más lenta y también (99,6% del relativo). Entonces, al menos 5.4 segundos desapareciendo para analizar. Una desgracia con el --cache es que no funciona con --stdin algo que me hizo tropezar al tratar de optimizar esto como una integración de editor.

    – terje

    20 mayo 2019 a las 20:16

Descubrí que eliminar reglas lentas realmente no ayudó mucho, ya que cargar eslint y el análisis de archivos lleva un tiempo.

Es posible utilizar el --cache opción de eslint (documentos) para acelerar las cosas sustancialmente.

Cuando usas eslint a “lint-as-you-type” en varios editores, instalando eslint_d permite correr eslint como un demonio, y salva el node Tiempo de carga.

En el proyecto en el que estoy trabajando actualmente, combinando ambos eslint_d y --cache ¡trajo el tiempo de formación de pelusa de 4+ segundos a 0.17!

  • Yo uso vim con el CERVEZA INGLESA complemento para pelusa. Configuración let g:ale_javascript_eslint_executable = 'eslint_d --cache' usar ambos eslint_d y --cache ¡aceléralo de ~ 1 segundo para que sea casi instantáneo!

    – Giovanni Benussi

    11 oct 2019 a las 12:53

  • Uso eslint a través del complemento Syntastic para VIM. Cualquier información sobre cómo habilitar --cache mientras se ejecuta desde Syntastic?

    – nullromo

    9 jun 2020 a las 20:34

  • No uso syntastic yo mismo, pero el documentos en la sección 4.5 mencione cómo pasar opciones a un verificador, supongo que en su caso algo así como let g:syntastic_javascript_eslint_args = "--cache"

    – Laurent S.

    10 de junio de 2020 a las 12:23

  • Hay algunas opciones que tuve que cambiar para obtener eslint_d trabajando correctamente con syntastic. let g:syntastic_javascript_checkers = ['eslint'] let g:syntastic_javascript_eslint_exe = 'eslint_d' let g:syntastic_javascript_eslint_args = "--cache" let g:syntastic_javascript_eslint_exec = '/bin/ls' Por último, debe asegurarse eslint_d está en la RUTA cuando se inicia vim.

    – lucas campbell

    10 de julio de 2020 a las 17:18


  • ¿Cómo podemos usar esto con create-react-app ?

    – SeyyedKhandon

    1 de agosto de 2021 a las 8:19

En mi caso estoy usando @typescript-eslint/eslint-plugin (pelusa con información de tipo) y había configurado mal el tsconfig include campo. Residencia en este documento tienes que incluir todos tus archivos. Así que actualicé mi configuración de eslint:

module.exports = {
  overrides: [
    {
      files: ['*.ts'],
      parserOptions: {
-       project: ['tsconfig.json'],
-       createDefaultProgram: true,
+       project: ['tsconfig.json', './projects/*/tsconfig.json'],
+       createDefaultProgram: false,
      },
    }
  ]
}

Esto también puede suceder si está usando @angular-eslint/eslint-plugin. Leer la sección de rendimiento de sus documentos

También encontré este problema, esto se debió a que habilité createDefaultProgram: true¡eliminarlo aumentó mis actuaciones significativamente!

¿Ha sido útil esta solución?