Что такое "CrankShaftScript"в узле.js?
В узле появляется все больше и больше ссылок.сообщество js для" CrankShaftScript "(и" CrankShaftJS") в группах Twitter, GitHub и Facebook. Я так и думал.js был написан на C++ и JavaScript, так что CrankShaftScript ссылается на ошибки регрессии производительности, такие как этот:
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"). Как и в этих вопросы:
- https://github.com/nodejs/node/issues/11851#issuecomment-287253082
- https://github.com/nodejs/CTC/issues/146#issuecomment-310229393
- https://twitter.com/matteocollina/status/870580613266501632
По этим причинам узел.сообщество js активно работает над удалением экземпляров CrankShaftScript в Node.код ядра js, а также в обычных пакетах npm. Это должно помочь альтернативному узлу.распределения js подобно node-chakracore работают лучше и уменьшают риск будущих обновлений среды выполнения JavaScript в Node.JS.
CrankShaft - это инфраструктура компиляции для узла V8.JS ' Javascript runtime (подробности).