В сообществе Node.js все больше ссылок на "CrankShaftScript" (и "CrankShaftJS" ) на обсуждениях в Twitter, GitHub и Facebook. Я думал, что Node.js написано на С++ и JavaScript, так что CrankShaftScript ссылается на ошибки регрессии производительности, такие как этот:
Что такое "CrankShaftScript" в Node.js?
Ответ 1
CrankShaftScript является принятым сообществом термином, используемым для неидиоматического и/или нестандартного совместимого JavaScript, который будет выполнять и/или хорошо работать в конкретных версиях среды выполнения JavaScript v8, в которых используется компилятор CrankShaft JIT. Конкретные примеры включают в себя: циклы, написанные в сложном для поддержания режима, чтобы работать с недостатками оптимизации JIT в версии 8 и использовать встроенные функции/глобальные переменные v8.
Этот термин был первоначально использован для описания некоторых проблем производительности root в node -chakracore и spidernode, которые являются Node.js-дистрибутивами, в которых используются чаты ChakraCore и SpiderMonkey вместо v8.
В настоящее время он используется в качестве сокращения, чтобы объяснить, почему версия Node.js 8.1, обновленная до более новой версии v8, имеет несколько регрессий производительности в микро- и макро-тестах из-за замены V8 CrankShaft JIT TurboFan (иногда называемый "TF" ). Как и в этих проблемах:
- https://github.com/nodejs/node/issues/11851#issuecomment-287253082
- https://github.com/nodejs/CTC/issues/146#issuecomment-310229393
- https://twitter.com/matteocollina/status/870580613266501632
По этим причинам сообщество Node.js активно работает над вырезанием экземпляров CrankShaftScript в w631>.js, а также в общих пакетах npm. Это должно помочь альтернативным Node.js дистрибутивам, таким как node -chakracore, лучше выполнять и облегчать риск будущих обновлений для среды выполнения JavaScript в Node.js.
Ответ 2
CrankShaftScript - это имя, данное сообществом JS-идиомам (например, некоторым типам циклов), которые работают быстрее (est?) на двигателе V8 CrankShaft.
CrankShaft заменяется двигателем TurboFan. Многие JS-коды, написанные разработчиками на протяжении многих лет, были написаны специально для быстрого запуска на CrankShaft (например, написано в "CrankShaftScript" ) с использованием известных идиом, которые быстро запускаются на CrankShaft - это уже не так, потому что теперь движок V8 разные, а код, который работает быстрее на CrankShaft, не обязательно гарантированно работает быстрее на TurboFan.
Если мой ответ слишком многословный, отличный комментарий на NodeJS Benchmarks, который может более подробно описать его:
... Я заметил, что некоторые части ядра Node сортируются в CrankshaftScript, т.е. Тщательно настраивается на материал, который работает очень хорошо в коленчатом валу.
Ответ 3
CrankShaft - это инфраструктура компиляции для V8, Node.js 'Javascript runtime (подробности).
Теперь теперь заменяется на TurboFan.