Node JS
2.09K subscribers
164 photos
66 videos
17 files
226 links
Подборки по Node js и все что с ним связано. По всем вопросам @evgenycarter
Download Telegram
Открытый урок «Оптимизация работы компонентов в React.js».
Когда: 29 января в 20:00 мск.

На вебинаре вы узнаете:
- Как работать с оптимизацией в React.js
- Особенности работы функциональных компонентов и хуков
- Трюк с мемоизацией коллбеков для списка элементов

Встречаемся в преддверии старта курса «React.js Developer» Otus.
Все участники вебинара получат специальную цену на обучение!

Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cHW5E9

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Избегаем ложных срабатываний в тестах Node.js

В статье автор рассматривает распространенные ошибки, приводящие к ложным положительным результатам в тестах. Например, использование assert.equal() вместо assert.strictEqual() может привести к неожиданным результатам из-за приведения типов в JavaScript.
Также обсуждается опасность чрезмерно общих утверждений, таких как .toBeTruthy(), которые могут скрывать реальные проблемы в коде. Автор подчеркивает важность тщательного написания тестов и избегания копипасты, чтобы повысить надежность тестового покрытия.

https://blog.appsignal.com/2024/11/20/avoiding-false-positives-in-nodejs-tests.html

✍️ @nodejs_lib
👍3
React 19: что нового в самой популярной библиотеке для создания интерфейсов? Узнайте первыми!

Новые хуки, улучшения рефов, кастомные элементы — React становится ещё удобнее. И мы готовы рассказать, как использовать это на практике.

Хотите быть на пике технологий? На открытом вебинаре 6 февраля в 19:00 мск разберём, как применять нововведения React 19 в реальных проектах.

Все участники получат скидку на большое обучение «React.js Developer» — идеальный способ прокачать навыки.

Записаться: https://vk.cc/cI3aWQ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Представьте себе полноценный PostgreSQL, работающий прямо в браузере или Node.js без необходимости поднимать отдельный сервер или встраивать Linux-образ. Проект PGlite реализует эту идею, предоставляя всего лишь 3 МБ (в сжатом виде) с поддержкой популярных расширений, таких как pgvector.

PGlite — это PostgreSQL, скомпилированный в WebAssembly и упакованный в простую TypeScript/JavaScript-библиотеку. Его ключевая особенность — отсутствие "линуксового" виртуального окружения, что обеспечивает минимальный размер и удобный API. Вы можете использовать PGlite как in-memory базу или включить постоянное хранение данных в IndexedDB (в браузере) или файловой системе (в Node.js/Bun/Deno).

Основные преимущества PGlite:

- Минимальный размер — около 3 МБ в сжатом виде.
- Удобный API — простое подключение библиотеки и вызов методов для работы с базой данных. Совместимость с популярными ORM, такими как Drizzle или TypeORM.
- Поддержка расширений — в комплект входят некоторые популярные плагины, например, pgvector.

Пример использования PGlite в браузере:


import { PGlite } from "@electric-sql/pglite";

const db = new PGlite();
const result = await db.query("SELECT 'Привет, мир!' AS message;");
console.log(result);
// -> { rows: [ { message: "Привет, мир!" } ] }


Для сохранения данных между перезагрузками в IndexedDB:


const db = new PGlite("idb://my-pgdata");
// Данные сохранятся в IndexedDB


В средах Node.js/Bun/Deno можно указать путь к файлу для постоянного хранения данных:


const db = new PGlite("./path/to/pgdata");
// Данные сохранятся в локальной файловой системе


PGlite подходит для быстрого тестирования и прототипирования, демонстрационных и учебных проектов, а также для "local-first" приложений, где данные хранятся локально и синхронизируются при подключении к внешней СУБД.

https://habr.com/ru/articles/873112/

✍️ @nodejs_lib
👍6👎1
Недавно я наткнулся на интересный вызов — обработать файл размером 12 ГБ, содержащий 1 миллиард строк формата <stationName>;<temperature>\n, с целью агрегировать минимальное, максимальное и среднее значения температуры для каждой станции. В своем блоге Jacky Efendi поделился своим опытом решения этой задачи с использованием Node.js, достигнув ускорения примерно в 30 раз по сравнению с базовой реализацией.

Jacky начал с базового подхода, используя встроенные модули Node.js для построчного чтения файла и хранения агрегированных данных в структуре Map(). Затем он провел профилирование кода с помощью Clinic.js Flame, чтобы определить узкие места производительности. Основное время выполнения занимала функция StringPrototypeSplit, используемая для разделения строк.

Для оптимизации Jacky предложил несколько улучшений:

1. Сокращение вызовов StringPrototypeSplit: уменьшение количества вызовов этой функции для повышения эффективности.
2. Более быстрые преобразования Buffer в числа: оптимизация процесса преобразования данных из буфера в числовые значения.
3. Параллелизация обработки: распределение работы между несколькими потоками или процессами для ускорения обработки больших объемов данных.

https://jackyef.com/posts/1brc-nodejs-learnings

✍️ @nodejs_lib
👍51
Как выбрать подходящий образ контейнера для Node.js-приложения

Основные моменты:

- Какой базовый образ использовать?
- node:<version> — полноразмерный образ на основе Debian, удобен для разработки.
- node:<version>-slim — урезанная версия, без ненужных инструментов.
- node:<version>-alpine — суперлёгкий образ, но требует совместимости с musl вместо glibc.

- Как уменьшить размер образа?
- Использование slim или alpine.
- Уменьшение количества слоёв в Dockerfile.
- Очистка временных файлов после установки зависимостей.

- Оптимизация производительности
- Включение NODE_ENV=production перед установкой пакетов.
- Использование --omit=dev в npm ci или yarn install --production.
- Кэширование node_modules для ускорения сборки.

- Дополнительные аспекты
- Выбор образа с LTS-версией Node.js для стабильности.
- Изоляция зависимостей и минимизация уязвимостей.
- Использование многослойных образов (multi-stage builds) для уменьшения итогового размера.

Выбор правильного контейнерного образа может значительно повлиять на размер, производительность и безопасность вашего Node.js-приложения.

https://labs.iximiuz.com/tutorials/how-to-choose-nodejs-container-image

✍️ @nodejs_lib
👍72
OpenTelemetry — это мощный фреймворк, который упрощает процесс сбора и стандартизации телеметрических данных, таких как логи, трассировки и метрики, в различных языках программирования и платформах. Он обеспечивает единообразный подход к инструментированию приложений, независимо от используемых языков программирования, фреймворков или инструментов наблюдаемости.

В недавно опубликованном руководстве на Better Stack Community рассматривается, как использовать OpenTelemetry для добавления трассировки в ваши Node.js приложения. В этом руководстве вы найдете пошаговые инструкции по настройке демонстрационного проекта, инициализации SDK OpenTelemetry для Node.js, настройке OpenTelemetry Collector и Jaeger, а также по кастомизации автоинструментирования и добавлению пользовательской трассировки.

Благодаря этому руководству вы сможете эффективно мониторить и анализировать производительность вашего приложения через детальные данные трассировки, выявлять узкие места и оптимизировать его работу.

https://betterstack.com/community/guides/observability/opentelemetry-nodejs-tracing/

✍️ @nodejs_lib
👍3
Переходим с Node.js на Go… но это не точно

Создатель Node.js Райан Даль в одном из своих интервью заявил, что для написания серверов предпочёл бы Go. Это интервью состоялось в 2017 году, с тех пор Райан переходил на Rust, даже написал на нём еще одну среду для выполнения серверного JS – Denо. Но джин уже выпущен из бутылки. Стали даже появляться заявления о скорой кончине Node.js. Фразу продолжают вспоминать в спорах по сей день, и сейчас можно увидеть статьи о переходе с Ноды на Голанг.

Мне же представляется, что вопрос о переходе между этими двумя технологиями едва ли стоит – эти решения для разных ниш. Прикладные API-сервера, для которых чаще всего используют Ноду устроены таким образом, что получить выигрыш производительности переходом на Go довольно трудно, а вот замедлить разработку очень легко.

https://habr.com/ru/articles/890882/

✍️ @nodejs_lib
👍10
🚀 Node.js Developer — это курс, который сделает из вас профессионального разработчика серверных приложений! Если вы уже знаете JavaScript, но хотите выйти на новый уровень и освоить Express, TypeScript, GraphQL, Apollo и Nest.js, этот курс для вас!

🗓 Старт уже скоро! 27 марта!

Длительность: 4 месяца

📍 Формат: Онлайн

🕗 Занятия: Вт/Чт 20:00 МСК

💡 Что вас ждет на курсе?

Полное погружение в backend-разработку с Node.js
Освоение работы с MongoDB и PostgreSQL
Глубокое изучение GraphQL и Apollo
Создание собственного backend-проекта для портфолио
Практика с TDD, WebSockets, CI/CD и Docker
Поддержка преподавателей и комьюнити

🎯 Для кого этот курс?

Этот курс для разработчиков, которые уже знакомы с JavaScript и хотят освоить полный стек инструментов для бэкенда. Вы научитесь писать чистый и масштабируемый код и получите готовые навыки для работы в современных проектах.

👨‍🏫 Кто преподает?

Опытные разработчики, которые работают в индустрии и помогут вам разобраться в реальных кейсах.

🎓 Чем полезен курс?

📌 Развитие сильного технического стека
📌 Глубокое понимание архитектуры и дизайна Node.js
📌 Практика с микросервисами, Docker, Nest.js и Kubernetes
📌 Разбор реальных кейсов от экспертов

💼 После курса:

🔹 Вы сможете уверенно работать с Node.js, TypeScript и GraphQL
🔹 Создадите свой проект, который можно показать работодателям
🔹 Получите помощь в поиске работы и подготовке резюме

🔥 Готовы прокачать свои навыки? Проходите тест: https://vk.cc/cJSmxg

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👎1👌1
🔍 Трассировка в Node.js: практическое руководство по анализу производительности приложений

Когда дело доходит до оптимизации приложений на Node.js, важно понимать, что происходит "под капотом". Именно здесь на помощь приходит трассировка. Она позволяет выявлять узкие места, следить за выполнением кода и улучшать общую производительность.

Node.js включает встроенные средства для трассировки — async_hooks, trace_events и инструменты профилирования. Их можно использовать для:
- Анализа времени выполнения отдельных операций;
- Выявления блокирующих функций;
- Понимания взаимодействия между асинхронными событиями.

В статье от NodeSource пошагово показано, как:
- Включить трассировку через флаг --trace-events-enabled;
- Использовать Chrome DevTools для визуализации событий;
- Настроить пользовательские события через API trace_events.

Также объясняется, как интегрировать трассировку с внешними инструментами (например, Jaeger или OpenTelemetry), чтобы получить распределённую трассировку в микросервисной архитектуре.

https://nodesource.com/blog/tracing-nodejs

✍️ @nodejs_lib
👍7