Node.js Digest #12: State of JavaScript 2023, Node.js vs Bun, дірявий NPM
Привіт, спільното! На звʼязку Олександр Зіневич, Engineering Director з Avenga. Настав час для нового дайджесту. Спека на вулиці просто неймовірна, тож пориньмо у свіжі новини зі світу Node.js 👇
Коротко про головне
🔹 Традиційні оновлення Node.js v22.4.1, Node.js v20.15.1, Node.js v18.20.4, за якими можна часом і не встигнути 🙂
🔹 Команда pnpm у новій 9.5 версії додала свій аналог Yarn Workspace який отримав назву Catalogues.
🔹 Vercel додають підтримку Streaming для усіх Node.js Vercel Functions за замовчуванням.
🔹 Оновлення для Deno v1.45.0. Детальніше усі зміни можна переглянути тут.
Нарешті дочекались — State of JavaScript 2023
6 місяців — час, якого достатньо, щоб провести вибори у Франції, провести Олімпійські Ігри, чи відкрити вакцину проти Covid (яку відкликати за пару років хе-хе). Стільки ж часу було потрібно авторам State of JavaScript 2023, щоб підбити підсумки, намалювати гарні графіки та поділитись зі спільнотою тим, що (СПОЙЛЕР) JS живіший всіх живих, але радості від того все менше 🙂
Оскільки переважно JavaScript використовується для розробки фронтенду, то і багато питань стосувались саме досвіду такого використання. Але і серверну частину стороною не обійшли. З повним списком результатів можете ознайомитись за посиланням.
З цікавого та очікуваного, це, звісно, відповіді про те, що ж такого найбільше не подобається у JavaScript. Тут беззаперечним лідером є статична типізація. Це доволі очікувано, враховуючи наскільки популярним є Typescript. Також трохи болі розробникам додає поточна ситуація з ESM та CJS модулями і робота з датами.
Серед сервісів для хостингу AWS — лідер, якого потрохи наздоганяють Vercel та Github pages.
На бекенді Express все ще лідер серед усіх фреймворків, які використовуються. На мою думку, причина в тому, що дуже багато коду написано з використанням цього фреймворку і саме він гарно пасує для невеликих застосунків. Express, з одного боку, достатньо гнучкий, з іншого — за весь той час скільки він існує, спільнота зробила надзвичайну роботу з відловлювання та розв’язання різноманітних проблем і стабілізації та оптимізації.
Node.js лишається основним середовищем виконання JavaScript, обігнавши навіть браузер, що очікувано, враховуючи таке собі дрейфування у різноманітні архітектурні рішення, що використовують сервер. Bun обігнав Deno через хайп чи через те, що це дійсно кращий інструмент — побачимо вже у наступному опитуванні 🙂
Станом же ж на сьогодні, Bun — це середовище, яке викликає найбільший інтерес у спільноти. Про нього було найбільше згадок у розгорнутих відповідях, які лишали респонденти.
Typescript надзвичайно популярний і використовується значно частіше, ніж чистий JavaScript. Це доволі очікувана відповідь, яку більшість зі спільноти спостерігає на своїх проєктах вже сьогодні.
Це лише частина фактів, що привернули мою увагу. Також на цю ж тему можете переглянути короткий огляд результатів від Theo Browne: Every Framework Sucks Now
SQLite built-in
Як я вже згадував у попередніх дайджестах, усі нові середовища виконання JavaScript на сервері, можливо, і не зможуть завоювати значні частини ринку, можливо, й не здобудуть такої популярності серед спільноти, як її утримує вже довгий час Node.js. Але точно принесуть у JavaScript на сервері якісь нові ідеї та рішення, які потенційно будуть переймати всі інші, включно і з Node.js. Так, на офіційному репозиторії Node.js у Github розпочалась дискусія про те, чи не варто повторити те, що вже заімплементано у Bun і додати повноцінну підтримку SQLite. Після тривалої дискусії якихось явних і сильних заперечень ніхто не озвучив. Станом на сьогодні ось цей PR з відповідними змінами вже змерджили — у коментарях ви можете бачити, що функціонал ще сирий і потребує доопрацювання. Але робота йде і у найближчому майбутньому ми побачимо повноцінну підтримку SQLite в Node.js
Новий раунд у протистоянні Bun та Node.js
Для більшості з читачів не секрет, що однією з основних складових маркетингу Bun була нереальна швидкодія у порівнянні з Node.js. Коли вийшла перша production-ready версія Bun, як на їх офіційному сайті, так і на інших платформах почали з’являтися приклади того, який швидкий Bun і, що скоро Node.js помре.
Через якийсь час почала з’являтися вже інша інформація з прикладами того, як Bun далеко не настільки швидший за Node.js. Інколи ця швидкодія була лише трішки кращою, а інколи взагалі не сильно відрізнялась, а то й була гіршою. Час іде, розробники Bun не перестають робити акцент на оптимізацію та швидкодію аж ось, на платформі X Deniel Lemire розписав цікавий кейс того, де Bun демонструє набагато кращу швидкодію ніж Node.js, проте з одним цікавим нюансом.
Автор декодував Base64 стрічку і порівняв швидкодію обидвох середовищ виконання. Bun виявився швидшим за Node.js у рази, не дивлячись на те, що під капотом обидвоє використовують бібліотеку simdutf (автором якої якраз і є Deniel Lemire) для декодування. Цікавим тут є те, що Node.js повільніший через специфіку взаємодії із V8 і через додаткові рівні абстракцій, які заторможують роботу, але закладені архітектурою. Цікавий кейс і цікаві думки автора на цю тему.
Як правильно заробляти?
Відповіді на це питання я вам не дам, проте цілком може дати автор бібліотеки ua-parser-js, який раптово вирішив змінити ліцензування і заробити трошки грошиків з тих 12 мільйонів завантажень щотижня. Matteo Collina вже встиг не тільки написати про це допис у своєму блозі, а й зробити форк бібліотеки, яку можна буде безплатно використовувати й надалі. Загалом цю бібліотеку використовує багато хто, і така різка зміна вплине на велику кількість проєктів, тому готуйтесь оновлюватись 😉
Дірявий npm
Вже доброю традицією моїх дайджестів стало писати про безпекові проблеми, що виникають у npm. Зазвичай, це проблеми конкретних пакетів та розробників, які не дуже слідкують за тим, що використовують. Проте цього разу ситуація трішки цікавіша.
Команда Lupin & Holmes знайшла вразливість, яка потенційно може зробити будь-який npm пакет тимчасово недоступним. Github подякував їм за це і дав 500 доларів за знахідку, з коментарем, що Github вже і так знали про цю вразливість npm. Знали чи не знали, але якщо навіть на короткий час, якийсь із популярних npm пакетів буде недоступним, це викличе величезну низку проблем для багатьох проєктів. Детальніше про знахідку, і чому це важливо, можете почитати тут.
Щось почитати
🔹 Не працювали із Vercel Functions і не зовсім розумієте, як це працює і для чого потрібне? У офіційному блозі Vercel опублікували допис з коротким оглядом цього сервісу.
🔹 Багато хто з вас знайомий з підходами до побудови розподілених систем, але завжди гарна ідея — пригадати те, з чим не зустрічаєшся безпосередньо кожного дня 😉
🔹 Чи чули ви про PASETO? А чим він відрізняється від JWT? Якщо ні, то якраз час ознайомитись.
🔹 Завжди люблю читати кейси технічних викликів і як їх вирішують великі компанії. Цього разу про те, як Slack боролись із скомпрометованими куками.
🔹 Хоч Express і лідер серед фреймворків на сервері, але місцями він не задовольняє усі-усі потреби проєктів та користувачів, і виникає потреба переходу на інший фреймворк. У своєму блозі Tom MacWright поділився
🔹 Схоже, що ESLint набирає темп і розпочав свій рух новим вектором розвитку. Ознайомитись з тим, що змінилося, і що зміниться, можна в офіційному блозі компанії.
🔹 Eric Allam розповідає про боротьбу його команди з Even Loop.
🔹 Про те як створити npm модуль з підтримкою CommonJS та ESM і Typescript у своєму блозі пише Waldek Mastykarz.
Щось подивитись
🔹 Luca Mezzalira розповідає як правильно мислити в Serverless парадигмі:
🔹 Чи безпечний npm? Нове відео від Theo Browne:
🔹 Concurency і Prallelism чи добре ви розумієте ці концепції? У короткому відео від ByteByteGo автор розповідає про суть обох концепцій:
🔹 Таке собі реаліті-шоу про те, який додаток можна створити маючи 30 хвилин на планування і 4 години на розробку. Не дуже стосується саме світу Node.js, але сам формат цікавий:
🔹 Трішки про Polyfill атаку, яка сколихнула вебспільноту. Дуже-дуже рекомендую подивитись короткий огляд того, що ж відбулось, і чому так важливо приділяти багато уваги тому, що ви використовуєте у своїх додатках:
🔹 Сучасні Cloud-based сервіси та функціонал, що вони надають, дають дуже багато переваг, але поряд з тим є і значна кількість недоліків. Трішки думок на цю тему у наступному відео:
🔹 Трішки про Drizzle ORM на каналі Web Dev Cody:
🔹 Ще трішки про System Design, а саме про Distributed Priority Queue:
Бібліотека місяця
Цього місяця у нас знову бібліотека, при чому не проста, а така, що дає чудову швидкодію. Як часто вам доводилось робити з JSON звичайну стрічку? Звісно, для типових повсякденних задач можна використати JSON.stringify(), але що, якщо для вас критичною є швидкодія? У такому випадку на допомогу прийде бібліотека fast-json-stringify. Про те, чому ця бібліотека крута і, можливо, вам слід її використовувати вже сьогодні, можна почитати, наприклад, тут.
На цьому все. Пишіть коментарі, діліться дайджестом з друзями та ставте запитання, якщо маєте. До зустрічі у нових випусках! 😎
2 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів