Ale to powoduje kilka problemów:
- nowy kod może być wolniejszy, niż gdybym pisał sam w ES5
To zależy od tego, z których dokładnie ficzerów korzystasz i w jaki sposób transpilator to przekonwertuje. Niektóre rzeczy są kompilowane ładniej
https://babeljs.io/repl/#?experimental=false&evaluate=true&loose=false&spec=false&code=var%20a%20%3D%20(%7Babc%7D)%20%3D%3E%20abc%20%2B%201%3B%0A%0Avar%20%5Ba%2Cb%5D%20%3D%20%5B10%2C%2020%5D%3B%0A%0Aalert(a)%3B%0A%0Aalert(b)%3B
Taki kod na oko nie powinien być wolniejszy od zwykłego ES5. Z drugiej strony nie każdy ficzer ES6/ES7 jest kompilowany tak elegancko, więc jak człowiekowi zależy na wydajności można zawsze sprawdzić co ci realnie wypluje Babel i czy nie jest to jakiś potworek.
Poza tym nie trzeba się rzucać na każdy nowy ficzer, można korzystać z paru rzeczy.
Np. moim zdaniem fajna jest skrótowa notacja funkcji =>
chociaż trochę wkurzająca
Fajny jest też destructuring (np. function foo ({text}) { alert(text); } foo({text: 'hello world'})
- samo ci wyłuskuje właściwość text
jako zmienną.
Dobre jest też dodatkowy rodzaj deklaracji zmiennych let
o zasięgu blokowym (a nie na funkcję jak to jest z var
), oraz instrukcja const
do deklarowania stałych (albo zmiennych, które będziesz traktować jak stałe).
Poza tym wielkim osiągnieciem ES6 są moduły, które pozwalają na podzielenie projektu na wiele części i importowanie/eksportowanie rzeczy np.:
import React from 'react'
czy
export function foo() {}
wtedy używając np. Babel i Browserify(+Babelify bodajże) możesz mieć kod podzielony na moduły (chociaż podobno Browserify jest już passe, i ludzie używają z Webpacka. Ja natomiast jeszcze w WebPacka nie wszedłem więc piszę o Browserify). To samo można było co prawda robić używając choćby pseudomodułów CommonJS, ale te są lepsze, bo bardziej statyczne (co umożliwia lepszą analizę statyczną kodu).
Nie jestem natomiast jak z kompatybilnością ES6 i NodeJS. Obecnie trochę frajersko jak potrzebuję napisać coś sobie w Node to piszę to na ES5 bo mi nie wchodzi inaczej. (Napisałem frajersko, bo pewnie jakbym ustawił w NVM nowszą wersję Node, albo jakbym transkompilował to również na potrzeby NodeJS to pewnie by mi zadziałało -- ale póki co nie chce mi się tego sprawdzać (robię coś dla siebie akurat teraz, gdzie kod Node jest tylko częścią projektu)).
Podsumując - może nie wszystko, ale ES6 to parę ciekawych ficzerów, z których warto korzystać dla własnej wygody, i przejrzystości kodu. Nie trzeba używać wszystkiego. Poza tym możesz zobaczyć co ci wypluwa transpilator i zadecydować czy z czegoś korzystasz czy nie (o ile faktycznie robisz coś, gdzie potrzebujesz szybkości - bo większość rzeczy, które się pisze w JS nie potrzebują aż takich optymalizacji).