рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рд╡реЗрдмрдкреИрдХ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЪрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ!
1. рд░реАрдЬреЗрдирд░реЗрдЯрд░-рд░рдирдЯрд╛рдЗрдо рдХреЗ рдмрдЬрд╛рдп рдлрд╛рд╕реНрдЯ-рдПрд╕рд┐рдВрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЖрдорддреМрд░ рдкрд░, рдбреЗрд╡рд▓рдкрд░ рд╕рднреА рдЖрдзреБрдирд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ ES5 рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП
@ babel / preset-env рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗ рд╕рд╛рде, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
рд╕реНрд░реЛрдд рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди ->
рдЬрдирд░реЗрдЯрд░ ->
рдкреБрдирд░реНрдпреЛрдЬреА-рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдлрд╝рдВрдХреНрд╢рдирдЙрджрд╛рд╣рд░рдг1. рдореВрд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рд░реЛрд╣
const test = async () => { await fetch('/test-api/', { method: 'GET' }); }
2. рдЬрдирдХ
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } const test = (() => { var _ref = _asyncToGenerator(function* () { yield fetch('/test-api/', { method: 'GET' }); }); return function test() { return _ref.apply(this, arguments); }; })();
3. рдкреБрдирд░реНрдпреЛрдЬреА-рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рдВрдХреНрд╢рди
'use strict'; function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } var test = function () { var _ref = _asyncToGenerator( regeneratorRuntime.mark(function _callee() { return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return fetch('/test-api/', { method: 'GET' }); case 2: case 'end': return _context.stop(); } } }, _callee, undefined); })); return function test() { return _ref.apply(this, arguments); }; }();
рдлрд╛рд╕реНрдЯ-рдПрд╕рд┐рдВрдХреНрд╕ рдХреЗ рд╕рд╛рде, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рд╕реНрд░реЛрдд рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рд░реЛрд╣ -> рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдорд╛рд░реЛрд╣
рдЙрджрд╛рд╣рд░рдг1. рдореВрд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рд░реЛрд╣
const test = async () => { await fetch('/test-api/', { method: 'GET' }); }
2. рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдорд╛рд░реЛрд╣
var test = function test() { return new Promise(function ($return, $error) { return Promise.resolve(fetch('/test-api/', { method: 'GET' })).then(function ($await_1) { try { return $return(); } catch ($boundEx) { return $error($boundEx); } }, $error); }); };
рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдкреБрдирд░реНрдпреЛрдЬреА-рд░рдирдЯрд╛рдЗрдо рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд░рдг рд╣реИрдВред
рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рддреЗрдЬрд╝-рдПрд╕реНрдХрд┐рдВрдЯ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
1. рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm i fast-async
2. рдХреЛрд▓рд╛рд╣рд▓ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдВ
рдореЗрд░реЗ рд▓рд┐рдП, рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдиреЗ js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЖрдХрд╛рд░ 3.2% рдШрдЯрд╛ рджрд┐рдпрд╛ред рдПрдХ рддрд┐рдкрд╣рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫрд╛ :)
2. рдвреАрд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╡рд┐рд╢реЗрд╖ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд┐рдирд╛,
@ babel / preset-env рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдХрд╛ рдХреЛрдб рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ ES6 + рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдкреНрд░реАрд╕реЗрдЯ-рдПрдирд╡реА рдХреЗ рд▓рд┐рдП рдвреАрд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдХреЗ рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдУрд╡рд░рд╣реЗрдб рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддрд╛
рд╣реИ ред
рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдЗрд╕ рдмрдВрдбрд▓ рдХрд╛ рдЖрдХрд╛рд░ 3.8% рдХрдо рд╣реЛ рдЧрдпрд╛ред
3. рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдЬреЗрдПрд╕ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдорд┐рдирд┐рдлрд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдордВрддреНрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рд╡реЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рддреЛрдбрд╝рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рд▓реЗрдХрд┐рди рд╣рдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ?
рдЬреЗрдПрд╕ рдорд┐рдирд┐рдлрд╛рдпрд░ рдФрд░ рдЕрдкрдиреЗ рд╕реАрдПрд╕рдПрд╕ рдорд┐рдирд┐рдлрд╛рдпрд░ (рдореИрдВ
cssnano рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░реЗрдВ ) рдХреЗ
рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
рдбреЙрдХреНрд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдпрд╣ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд┐рдпрд╛:
рдирддреАрдЬрддрди, рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЖрдХрд╛рд░ 1.5%, рдФрд░ рд╕реАрдПрд╕рдПрд╕ - 2% рдХрдо рд╣реЛ рдЧрдпрд╛ред
рд╢рд╛рдпрдж рдЖрдк рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
UPD 01/11/2019: UglifyJsPlugin рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ,
рд╡реЗрдмрдкреИрдХ рдЕрдм
TerserWebpackPlugin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
4. рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд▓-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
Gsap рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ
рдкрд╛рд╕ рдПрдирд┐рдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рдПрдХ рдмреЗрд╣рддрд░реАрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рд▓реЗрдХрд┐рди 2008 рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЗрд╕рдореЗрдВ рдмрдиреА рд░рд╣реАрдВред
рдЕрд░реНрдерд╛рддреН
, рдпрд╣ рдПрдХ ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЯреНрд╡реАрдирдореИрдХреНрд╕ 5 рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдИрдЬрд╝реАрдкреИрдХ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЕрдВрджрд░ рддреАрди рдирд┐рд░рд░реНрдердХ рдкреНрд▓рдЧ рджреЗрдЦреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ
рдирд▓-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдЯ рджрд┐рдпрд╛:
рдФрд░ 106 kb 86 рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред рд╣рд╛рдБ!
рдирд▓-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреА рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХреЛрдВ рдиреЗ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд▓рдЧрд╛рдпрд╛ рд╣реИред