рд╣рд╛рд▓ рд╣реА рдореЗрдВ, Habr├й рдкрд░ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдкрд╣рд▓рд╛
ES6 minification рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдерд╛, рджреВрд╕рд░рд╛ рд╕рд╛рдорд╛рдиреНрдп
рдЙрдкрдпреЛрдЧреА рд╡реЗрдмрдкреИрдХ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдЯрд┐рдкреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ ред
рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╡реЗ рджреЛрдиреЛрдВ minification рдФрд░ рдЕрдиреНрдп рдЕрдиреБрдХреВрд▓рди рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП ES6 рдФрд░ ES5 рдореЗрдВ рдмрдВрдбрд▓реЛрдВ рдХреЗ рдмрдВрдЯрд╡рд╛рд░реЗ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬрдмрдХрд┐ рдХреБрдЫ
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рдФрд░ рд▓рд┐рдЦрддреЗ
рд╣реИрдВ , рдЕрдиреНрдп (рд▓рдЧрднрдЧ рд╕рднреА) рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпреЛрдВрдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗред рдмрд╣реБрдд рдЬрд╝реНрдпрд╛рджрд╛ред рдФрд░ рдРрд╕рд╛ рдмрд╣реБрдд рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд▓реНрджреА, рд╕рд╕реНрддреЗ, рдФрд░ рдбрдореНрдмрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╢рд╛рдпрдж рдЖрдкрдХреЛ рд╕рд┐рд░реНрдл рдЙрд▓реНрдЯрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд┐рдЪрд╛рд░
"рд╡рд┐рдЪрд╛рд░" рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрдВрдбрд▓ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:
- рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЛрдб рд╣реИ
- рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ "рд╡рд┐рдХрд╛рд╕" рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ
- рдФрд░ рдпрд╣ рд╕рдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╣рд╛рдБ рд╣реИ - рддрд╛рдХрд┐ async / рдкреНрд░рддреАрдХреНрд╖рд╛, рдЬрдирд░реЗрдЯрд░, рдХрдХреНрд╖рд╛рдПрдВ, рддреАрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдЗрддрдиреЗ рдкрд░ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд▓рдХреНрд╖реНрдп: рдХреЛрд▓рд╛рд╣рд▓ рдореЗрдВ esmodules ред
рдореИрдВ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рдпрд╣рд╛рдВ рдЕрднреА рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИрдВ рдЬреЛ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рдмреАрдЪ рд╣реИрдВ, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИред
(рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рднреА рдЙрддреНрдкрд╛рджрди рдореЗрдВ es5 hiss рдХрд░рддреЗ рд╣реИрдВ, рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЗ рдЖрдзреЗ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдорд╕рд╛рд▓рд╛)рдФрд░ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредрд╣рд╕реНрддрд╛рдВрддрд░рдг
рд╡рд┐рдЪрд▓рди рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реАрдПрд▓рдЖрдИ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдмрдВрдбрд▓ рдХреЛ рд▓рдХреНрд╖реНрдп рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреА рд╣реИ: рдПрд╕реНрдореЛрдбреНрдпреВрд▓реНрд╕ рдФрд░ рдЗрд╕реЗ es5 рддрдХ рдиреАрдЪрд╛ рджрд┐рдЦрд╛рддреА рд╣реИ, рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рддрдм:
- рд╕рднреА js рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВ
- рдПрдХ рд╕рдХреНрд░рд┐рдп рдкреНрд▓рдЧрдЗрди (рдХрд╛рдВрдЯрд╛ useBuiltins: "рдЙрдкрдпреЛрдЧ") рдХреЗ рд╕рд╛рде рдмреЗрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдПрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддреЗрдЬрд╝ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИрдВред
- рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рдЙрд╕рдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╕рднреА рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ рдПрдХрддреНрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВ (рд╢реВрдиреНрдп рд╕реЗ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрдЦреНрдп рдмрдВрдбрд▓ рдореЗрдВ рд╣реЛрддреА рд╣реИрдВ), рдорд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЯрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреА рд╣реИрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВред
- рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ swc рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдИ рдЬрд╛рдПрдЧреА, рдмрд╛рдмреЗрд▓ рдХрд╛ рдПрдХ рд░рд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг, рдЬреЛ IE11 рдХреЛ рд╕рдордЭрдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдбреА-рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реИред рдХреЛрд▓рд╛рд╣рд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 10-60 рдЧреБрдирд╛ рддреЗрдЬ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╕рдм рдЖрд╡рд╢реНрдпрдХ рд╣реИ __ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИред
- terser рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рд╕реБрдкрд░рдЗрдореНрдкреЛрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдирд▓ рдСрдл (рдирд╛рдо рд╕рдВрдкреАрдбрд╝рди) рдХреЗ рд╕рд╛рде, рдЬреЛ рдлрд┐рд░ рд╕реЗ рддреЗрдЬрд╝ рд╣реИред
- рдпрд╣ рд╕рдм рд╢реНрд░рдорд┐рдХреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдХрдард┐рдирд╛рдИ рд╕реНрддрд░реЛрдВ рдХреА рддреАрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХреЛрдб рдЪрд▓рд╛рдпрд╛:
- рдкреНрд░реЛрдЬреЗрдХреНрдЯ 1, 60 рдЕрдВрддрд┐рдо рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЗрдВ (рдХреЛрдб-рд╡рд┐рднрд╛рдЬрди)ред 400 рдХрд╛ рд╕рдордп рдмрдирд╛рдПрдБред рд╡рд┐рдЪрд▓рди 30 sред
- рдкреНрд░реЛрдЬреЗрдХреНрдЯ 2, 1 рдЕрдВрддрд┐рдо js рдлрд╝рд╛рдЗрд▓ (30mb)ред 120 рдХрд╛ рд╕рдордп рдмрдирд╛рдПрдБред рд╡рд┐рдЪрд▓рди 10 sред
- рдкреНрд░реЛрдЬреЗрдХреНрдЯ 3, 1 рдЕрдВрддрд┐рдо js рдлрд╝рд╛рдЗрд▓ (2mb)ред рд╕рдордп 20s рдмрдирд╛рдПрдБред рд╡рд┐рдЪрд▓рди 5 рдПрд╕ (рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдЦреЛ рдЬрд╛рддреА рд╣реИрдВ)ред
рдИрдПрд╕рдПрдо рдмрдВрдбрд▓ рд╕реЗ рдмреЛрдирд╕ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рдерд╛:
- рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ 400kb рдмреЗрдмрд▓ / рдкреЙрд▓реАрдлрд┐рд▓ рдЦреЛ рджрд┐рдпрд╛ред рдХреБрдЫ рднреА рдирд╣реАрдВ "рдУрд╡рд░" рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЪрд┐рдкреНрд╕ рд╡рд╣рд╛рдБ рдЯреНрд░рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ "рдПрд╕рдПрд╕рдПрдо" рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкреЙрд▓рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
- рдЬреЗрдирд░реЗрдЯрд░, рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рдФрд░ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдХреЛрдб рдХреЗ рдХрд╛рд░рдг рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ 10% рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реБрдЖ
- рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рдЪрд╛рдкрд▓реВрд╕реА рдмрдврд╝рд╛ рджреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "рдвреАрд▓реЗ" рдмреЗрдмрд▓ рд░реВрдкрд╛рдВрддрд░рдг рдХрднреА-рдХрднреА рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдвреАрд▓рд╛ рдореЛрдб рдереЛрдбрд╝рд╛ рдЦрддрд░рдирд╛рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬрдмрдХрд┐ "ES6" рдХреЛрдб "рд╕реБрд░рдХреНрд╖рд┐рдд" рд╣реИред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░:
- рд╣рдо ES6 рдХреЛрдб рд▓реЗрддреЗ рд╣реИрдВ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ esmodule, let / const рдХреЛ рдЧрддрд┐ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП var рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)
- рдЗрд╕реЗ ES5 рдмрдирд╛рддреЗ рд╣реИрдВ
- рдкреЙрд▓реАрдлрд┐рд▓реНрд╕ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдлреЗрдВрдХ рджреЗрдВ
- рдбреИрдбреАрдЬрд╝ рдкрд░ рддрд┐рддрд░ рдмрд┐рддрд░ рдХрд░рдирд╛, рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реАрдорд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛
- рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╣реЛрд╢рд┐рдпрд╛рд░ (IE11 рдореЙрдбреНрдпреВрд▓ / рдирд╛рдорд╛рдВрдХрди рдХреЛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ) рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
- рдХрд┐рдпрд╛ - рдХрд╕реНрдЯрдо рдореАрдЯрд░ рдХреЗ 85% рдХреЗ рд▓рд┐рдП рдИрдПрд╕рдПрдо, рдЯреИрдВрдХ рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП ES5ред
рдмрд╕ред рдЬрд▓реНрджреАред рдмрд╕ рдмреЗрд╡рдХреВрдл рд╣реИред рд╣рдордиреЗ рдмрдВрдбрд▓ рдХреЛ рдбреА-рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ред рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░! рдФ - рдкрд░реЛрд╕рд╛ рдЧрдпрд╛ред
рдЦреИрд░, рдирдП рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рд▓рдЧрднрдЧ рдХреЛрдИ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдВрдбрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рдмрд┐рдирд╛ рдЬрдирд░реЗрдЯрд░ рдФрд░ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рднрдпрд╛рдирдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛, рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ tambourines (рдФрд░ рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рддреЗрдЬрд╝ рд╣реИрдВ)ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рд░ рдХреЛрдИ рдЦреБрд╢ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд░рд╛рджрд╛ рдерд╛ред
github.com/thekashey/devolutionрдкреБрдирд╢реНрдЪ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд╕рдордп, рд╡рд┐рдЪрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ swc рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрднреА-рдХрднреА рдХреЛрдб рдХреЛ рдмрд╣реБрдд рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - github.com/swc-project/swc/issues/280 , Babel рдЗрддрдирд╛ рдзреАрдорд╛ рдирд╣реАрдВ рд╣реИ - рдЬрд╣рд╛рдБ swc рд╕рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ 20 рд╕реЗрдХрдВрдб рдореЗрдВ, рдмреИрдмрд┐рд▓ рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред "рд╕рд╛рдорд╛рдиреНрдп" рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде - 5 рдмрд╛рдж рд╕реЗ - рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рд╣реИ
рдкреБрдирд╢реНрдЪ: рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ рдХреНрдпреЛрдВ рд╡рд┐рдЪрд▓рди -
рд╡реАрдбрд┐рдпреЛ рдпрд╣рд╛рдБ рд╣реИ ред