Что такое "CrankShaftScript"в узле.js?


В узле появляется все больше и больше ссылок.сообщество js для" CrankShaftScript "(и" CrankShaftJS") в группах Twitter, GitHub и Facebook. Я так и думал.js был написан на C++ и JavaScript, так что CrankShaftScript ссылается на ошибки регрессии производительности, такие как этот:

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

3 23

3 ответа:

CrankShaftScript-это имя, данное сообществом идиомам JS (таким как определенные типы циклов), которые работают быстрее(est?) на коленчатом двигателе V8.

Коленчатый вал заменяется двигателем с турбовентилятором. Многие JS-коды, написанные разработчиками на протяжении многих лет, были написаны специально для быстрого запуска на коленчатом валу (например, написанные в "CrankShaftScript"), используя известные идиомы, которые быстро работают на коленчатом валу - это уже не обязательно так, потому что двигатель V8 теперь отличается и код, который работает быстрее всего на коленчатом валу, не обязательно гарантированно работает быстрее всего на Турбовентиляторе.

В случае, если мой ответ слишком многословен, вот отличный комментарий на NodeJS Benchmarks поток, который может детализировать его лучше:

...Я заметил, что некоторые части ядра узла как бы записаны в CrankshaftScript, т. е. тщательно настроенный по отношению к вещи, которая работает очень хорошо в коленчатом валу.

CrankShaftScript-это принятый сообществом термин, используемый для неидиоматического и/или нестандартного совместимого JavaScript, который будет выполняться и / или хорошо работать только в определенных версиях среды выполнения JavaScript v8, использующих компилятор CrankShaft JIT. Конкретные примеры включают: циклы, написанные в трудной для поддержания манере, чтобы обойти недостатки оптимизации JIT в v8, и использование специфичных для v8 встроенных функций / глобалов.

Этот термин первоначально был придуман для описания некоторого корня проблемы с производительностью в узле-chakracore и spidernode, которые являются узлом.дистрибутивы js, использующие ChakraCore и SpiderMonkey вместо v8.

Теперь он используется как стенография, чтобы объяснить, почему узел.серия JS 8.1 release, которая обновилась до более новой версии v8, имеет несколько регрессий производительности в микро-и макро-бенчмарках из-за того, что коленчатый вал v8 был заменен Турбовентилятором (иногда называемым "TF"). Как и в этих вопросы:

По этим причинам узел.сообщество js активно работает над удалением экземпляров CrankShaftScript в Node.код ядра js, а также в обычных пакетах npm. Это должно помочь альтернативному узлу.распределения js подобно node-chakracore работают лучше и уменьшают риск будущих обновлений среды выполнения JavaScript в Node.JS.

CrankShaft - это инфраструктура компиляции для узла V8.JS ' Javascript runtime (подробности).

Его теперь заменяют Турбовентилятором.