nodejs node node.js v8

nodejs - ¿Qué es "CrankShaftScript" en Node.js?



nodejs 5 (3)

Hay más y más referencias en la comunidad Node.js a "CrankShaftScript" (y "CrankShaftJS") en Twitter, GitHub y discusiones grupales de Facebook. Pensé que Node.js estaba escrito en C ++ y JavaScript, así que a qué se refiere CrankShaftScript en errores de regresión de rendimiento como este:

https://github.com/nodejs/CTC/issues/146#issue-237435588



CrankShaftScript es el nombre dado por la comunidad a los modismos JS (como ciertos tipos de bucles) que se ejecutan más rápido (¿est?) En el motor CrankShaft de V8.

CrankShaft está siendo reemplazado por un motor llamado TurboFan. Muchos de los códigos JS escritos por los desarrolladores a lo largo de los años se han escrito específicamente para ejecutarse rápido en CrankShaft (por ejemplo, escrito en "CrankShaftScript") utilizando los modismos conocidos que se ejecutan rápidamente en CrankShaft; esto ya no es necesariamente el caso porque el motor V8 ahora está diferente y el código que se ejecutó más rápido en CrankShaft no está necesariamente garantizado para ejecutarse más rápido en TurboFan.

En caso de que mi respuesta sea demasiado detallada, aquí hay un gran comentario en el hilo de Benchmarks de NodeJS que puede detallarlo mejor:

... Me di cuenta de que algunas partes del núcleo de Node están algo escritas en CrankshaftScript, es decir, cuidadosamente sintonizadas con cosas que funcionan extremadamente bien en Crankshaft.


CrankShaftScript es un término adoptado por la comunidad para JavaScript no idiomático y / o no estándar que solo se ejecutará y / o se desempeñará bien en las versiones específicas del tiempo de ejecución de JavaScript v8 que emplean el compilador JIT de CrankShaft. Los ejemplos específicos incluyen: bucles escritos de una manera difícil de mantener para solucionar las deficiencias de optimización de JIT en v8, y el uso de funciones integradas / globales específicas de v8.

Este término fue acuñado originalmente para describir algunos problemas de rendimiento de la raíz en node-chakracore y spidernode, que son distribuciones de Node.js que emplean los tiempos de ejecución de ChakraCore y SpiderMonkey en lugar de v8.

Ahora se está utilizando como abreviatura para explicar por qué la serie de lanzamientos de Node.js 8.1, que se actualizó a una versión más nueva de v8, tiene varias regresiones de rendimiento en micro y macro pruebas comparativas debido a que el CrankShaft JIT de v8 ha sido reemplazado por TurboFan a como "TF"). Como en estos temas:

Por estas razones, la comunidad Node.js está trabajando activamente para eliminar instancias de CrankShaftScript en el código central de Node.js, así como en paquetes npm comunes. Esto debería ayudar a que las distribuciones de Node.js alternativas como node-chakracore funcionen mejor y reducir el riesgo de futuras actualizaciones al tiempo de ejecución de JavaScript en Node.js.