На 23 април излезе първоначалната версия на Node.js v12, като за период от две седмици последваха и два нейни ъпдейта – 12.1.0 и 12.2.0. Новата версия ще бъде поддържана в срок от 3 години.
Предвид развитието на технологиите и техните версии в днешно време, три години са дълъг период, така че нека видим основните промени, които правят сървърите на Node.js още по-бързи, а писането на код малко по-лесно.
Съдържание
Първо, какво представлява Node.js?
Node.js е JavaScript сървър технология, базирана на събития (events), които се изпълняват асинхронно.
Благодарение на безкрайния цикъл и JavaScript V8 (енджина на Google), уеб сървърите на Node.js са бързи, което ги прави и предпочитани.
Node.js версии:
Node.js V12 замества изтеклата в началото на месец май V11, която така и не бе пусната като препоръчителна версия. Също така V12 в момента е в тестов период, като от октомври се очаква да бъде пусната като LTS (дългосрочна поддръжка).
От официалния сайт на Node.js можете да свалите актуалната към момента версия 12.2.0 или все още препоръчителната V10.15.3.
Какво ново в Node.js v12:
✅ ECMAScript модули
⚠️Това е още експериментална поддръжка, така че препоръчваме засега да не ги използвате в продъкшън версията си поне докато не излезе дългосрочният релийз на V12.
Голямата промяна тук е в импортирането и експортирането на .js файлове. Само като добавите "type": "module"
в package.json файла си, Node.js ще приеме всеки ваш .js файл като модул. Ако изрично желаете някой файл да не бъде прочетен като js-модул, това става само като промените разширението на .cjs (CommonJS).
Значи трябва да пишем и разширенията?
Разбира се, интегрирали са и начин това да се избегне чрез флаг
--es-module-specifier-resolution=node
✅ Поддръжка на V8 7.4
Вече споменахме V8 енджина, а Node.js е в крак с последната му версия – 7.4. Ето и част от новостите тук:
- Специално внимание ще отделим на подобрението на error.stack при наличие на няколко асинхронни функции:
async function foo(x) { await bar(x); } async function bar(x) { await x; throw new Error("Let's have a look..."); } foo(1).catch(e => console.log(e.stack));
Досега e.stack показваше само първата по изпълнение функция (bar).
Error: Let's have a look... at bar (<anonymous>:7:9)
А вече през Chrome DevTools може да проследите целия стек!
- Private class fields е друга важна новост!
Класовете вече могат да имат частни полета, които се задават в началото с хаш #. Извън съответния клас те не са достъпни и хвърлят грешка.
class IncreasingCounter { #count = 0; get value() { console.log('Getting the current value!'); return this.#count; } increment() { this.#count++; } } const counter = new IncreasingCounter(); counter.#count; // → SyntaxError counter.#count = 42; // → SyntaxError
- по-бързи извиквания при несъвпадащи аргументи
- по-бърз await в асинхронна функция
- по-бърз parse
✅ Поддръжка на TLS 1.3
TLS 1.3 е новата версия на протокола за сигурност, осигуряващ извънредно висока поверителност, защото обменът на данни е криптиран и Node вече поддържа последната му версия, колко яко!
Още подробност за TLS 1.3 можете да прочетете тук.
⚠️Отново препоръчваме да не се използва в продъкшън проект преди дългосрочния релийз на Node.js V12 през октомври.
✅ Работните нишки
Употребата на работните нишки вече не налага flag. Основно Node.js използва еднонишков цикъл на събития (event cycle), като в някои случаи на използване могат да се използват допълнителни нишки за по-добри резултати.
✅ Heap размерът
Heap размерът на JavaScript ще бъде конфигуриран въз основа на наличната памет, вместо да се задава по подразбиране от V8 енджина. Досега V8 ограничаваше максималния размер до 700MB или 1,400MB съответно за 32-битови и 64-битови платформи. Конфигурирането въз основа на наличната памет гарантира, че Node.js не се опитва да използва повече памет, отколкото има. Това е полезно при обработката на големи масиви данни. Потребителите все още могат да използват –max-old-space-size, за да зададат свой собствен лимит.
✅ Още от ъпдейта на Node.js:
- Парсъра по подразбиране http се сменя с llhttp. Тестването на новата llhttp имплементация ще е по-лесно.
- Node.js v12 ни дава нова експериментална функция „Диагностичен доклад“.
- Подобрявайки времето за стартиране с 30% за основната нишка, Node.js 12 предварително генерира кеш код за вградени библиотеки по време на работната версия. В окончателната версия основната нишка може да използва кеш кода, за да стартира първоначалното зареждане на всяка вградена библиотека, написана на JavaScript.
- Кодовата база сега изисква минимум GCC (GNU Compiler Collection) 6 и glibc 2.17 на платформи, различни от MacOS и Windows, и следователно включва нови характеристики за подобряване на времето за компилация.
Пълния списък на промените може да видите в официалния сайт Node.js тук. Надяваме се скоро да ни се похвалите с новия си хипер бърз сървър, писан на Node.js v12!
Имате конкретни въпроси по темата? Пишете смело в коментарите или още по-добре – присъединете се към обществената ни фейсбук група Технологичното общество на България. Там ще можете да разчитате на компетентна помощ от нашите съмишленици.