В какую версию JavaScript мне следует компилировать?

Допустим, я пишу проект NodeJS на языке, который компилируется в JavaScript, например, на TypeScript. С TypeScript (или другими вещами, использующими Babel) у меня есть возможность скомпилировать свой код в любую версию JavaScript, будь то ES3, ES5, ES6, ES2017 и т. Д.

Очевидно, что если бы я писал что-то на стороне клиента, я бы придерживался более ранней версии, такой как ES5, для обеспечения совместимости для пользователей. Однако, поскольку я пишу что-то на стороне сервера специально для последней версии NodeJS, я мог бы использовать любой из этих вариантов. Я хочу знать, какую версию мне следует использовать, чтобы обеспечить максимальную производительность?

Интерпретатор NodeJS, V8, обеспечивает различные оптимизации в зависимости от того, как написан исходный код, поэтому я могу предположить, что выбор одного или другого может дать разные преимущества. С одной стороны, можно подумать, что лучше выбрать старую версию JS, поскольку она существует дольше и у нее было больше времени для оптимизации. С другой стороны, компиляция до более поздних версий JS приводит к значительно более чистому коду и полагается на более новые доступные функции, которые также могут помочь.

Любые мысли / отзывы будут оценены!


person Griffort    schedule 27.08.2018    source источник
comment
какой nodejs? LTS или текущий? - скомпилировать с любым используемым вами nodejs (на самом деле это не проблема)   -  person Jaromanda X    schedule 27.08.2018
comment
Когда функция должна быть преобразована в старую версию JavaScript, она имеет тенденцию вести себя по-разному. Используйте самую последнюю версию, чтобы избежать странностей.   -  person Ry-♦    schedule 27.08.2018
comment
какую версию мне следует использовать, чтобы обеспечить максимальную производительность? - Тот, который дает лучшую производительность при тестировании вашего кода.   -  person Quentin    schedule 27.08.2018
comment
Я действительно сомневаюсь, что перенос на более старую версию дает лучшую производительность. (За исключением тех случаев, когда babel не может воспроизвести правильную семантику и выбирает что-то попроще, но вы действительно захотите новую семантику)   -  person Bergi    schedule 27.08.2018


Ответы (1)


Я считаю, что этот вопрос в первую очередь основан на мнении, но ... я не думаю, что действительный вопрос следует игнорировать только потому, что есть часть, которая может считаться субъективной. Поэтому, хотя вы должны относиться к этому с недоверием (потому что, в конечном итоге, это ваше приложение и ваш выбор, какую версию использовать), я все же надеюсь, что это должно подтолкнуть вас в правильном направлении:


Я лично считаю, что вам следует компилировать до последней версии ES. Почему?
Сначала рассмотрим факты:

  • Совместимость - не такая уж большая проблема. Многие из старых функций могут быть полифилированы для совместимости.
  • Как справедливо заметил @ Ry-, когда функция конвертируется в старую версию JS, она может вести себя по-другому, часто так, как вы даже не заметите или не ожидаете.
  • В каждой версии ES есть некоторые изменения QoL, исправления и улучшения кода.
  • Предоставляет новые полезные функции

И сейчас это больше личное мнение, но я его придерживаюсь:

  • Я не думаю, что мы, разработчики, должны оглядываться назад и использовать устаревшие или совершенно неработающие методы и биться головой об стену. Вместо того, чтобы жаловаться на то, что другие не хотят адаптироваться, станьте частью движения и заставьте других адаптироваться. Я не говорю, что ваш сайт не должен быть «защищенным от дурака» для старых браузеров, напротив, просто не опускайтесь до их уровня и не ограничивайте себя из-за этого. Плывите по течению!

Подводя итог, если у вас нет особой причины, почему вы не должны использовать последнюю версию, тогда всегда используйте последнюю версию (LTS, а не последнюю бета-версию).

person Samuel Hulla    schedule 27.08.2018
comment
Я верю, что нужно использовать только самое последнее. Вот почему существуют такие инструменты, как Babel, поэтому вы можете писать в новейшей версии и при этом убедиться, что то, что вы пишете, можно использовать в большинстве, если не во всех браузерах. Не все могут использовать последнюю версию браузера, и не все последние версии браузеров еще могут поддерживать функции ES2020 (кашель Internet Explore кашель). Совместимость - это большая проблема. Например, если по какой-то странной и странной причине вы предпочитаете IE и пытаетесь использовать приложение, зависящее от переменных BigInt, удачи ему в работе при компиляции в ES2020. - person c0dezer019; 11.06.2021