Telegram Group Search
Недавно я наткнулся на интересный вызов — обработать файл размером 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
Как выбрать подходящий образ контейнера для 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
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
Переходим с Node.js на Go… но это не точно

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

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

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

✍️ @nodejs_lib
🚀 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
🔍 Трассировка в 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
Потоки записи в Node.js — практическое руководство

Node.js предоставляет мощную абстракцию ввода-вывода — Streams (потоки), которые позволяют эффективно обрабатывать данные частями, особенно когда речь идёт о больших объёмах данных. В этом руководстве мы сосредоточимся на Writable Streams — потоках, в которые можно записывать данные.

Что такое Writable Stream?

Writable Stream — это абстракция для источника данных, в который можно записывать. Примеры:

- fs.createWriteStream() — запись в файл
- http.request() — отправка HTTP-запросов
- net.Socket — запись в TCP-сокет
- process.stdout — вывод в консоль

Основные методы и события

Метод .write(chunk, [encoding], [callback])

Используется для записи данных в поток. Возвращает true, если поток готов принять ещё данные, иначе — false.


const fs = require('fs');
const stream = fs.createWriteStream('output.txt');

const result = stream.write('Hello, world!');
console.log(result); // true или false


Метод .end([chunk], [encoding], [callback])

Завершает поток. При необходимости можно передать финальный кусок данных.


stream.end('Final data');


События

- drain — вызывается, когда поток снова готов к записи (если ранее вернул false).
- finish — вызывается после завершения записи (после .end()).
- error — при возникновении ошибки.


stream.on('finish', () => console.log('Запись завершена.'));
stream.on('error', err => console.error('Ошибка:', err));


Управление потоком вручную

Когда stream.write() возвращает false, это означает, что внутренний буфер переполнен. Чтобы избежать перегрузки, стоит дождаться события drain:


function writeMany(stream, data, times) {
let i = 0;
function write() {
while (i < times) {
const ok = stream.write(data);
if (!ok) {
stream.once('drain', write);
return;
}
i++;
}
stream.end();
}
write();
}

writeMany(fs.createWriteStream('big.txt'), 'data\n', 10000);


Пользовательские Writable Streams

Вы можете создать свой Writable Stream, расширив Writable из модуля stream:


const { Writable } = require('stream');

class Logger extends Writable {
_write(chunk, encoding, callback) {
console.log(`LOG: ${chunk.toString()}`);
callback();
}
}

const logger = new Logger();
logger.write('Hello\n');
logger.end('Bye\n');


Итого

Writable Streams — ключевой инструмент в Node.js для эффективной записи данных. Они позволяют управлять потоком, обрабатывать ошибки и даже создавать свои реализации.

https://pavel-romanov.com/writable-streams-in-nodejs-a-practical-guide

✍️ @nodejs_lib
Профилирование Node.js приложения с помощью Pyroscope (без автоинструментирования)

Pyroscope — это мощный инструмент непрерывного профилирования, созданный для мониторинга производительности приложений в реальном времени. В этой статье мы рассмотрим, как быстро развернуть Pyroscope, подключить к нему Node.js приложение и проанализировать поведение кода без использования Grafana Alloy.

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

✍️ @nodejs_lib
Retrieval-Augmented Generation (RAG) на Node.js с Podman AI Lab и React

Retrieval-Augmented Generation (RAG) сочетает ИИ-модель со внешней базой знаний, чтобы дать более точные и информированные ответы. В этой статье рассказывается, как создать RAG-чатбот на Node.js, используя Podman AI Lab и React.

🔧 Что входит в стек:
* Node.js для серверной логики
* React для фронтенда
* Podman AI Lab для развёртывания моделей и управления векторными хранилищами
* LlamaIndex для индексации и поиска по документам
* LangChain для построения цепочек запросов
* OpenAI или Ollama как LLM-провайдер

📁 Этапы реализации:
1. Установка и запуск Podman AI Lab
2. Подготовка и загрузка документации (например, Markdown-файлов)
3. Индексация данных с помощью LlamaIndex
4. Создание backend API на Node.js
5. Интеграция с LangChain и вызов LLM
6. Реализация фронтенда на React для общения с ботом

🚀 Фишки:
* Поддержка как локальных, так и облачных моделей
* Удобный UI для экспериментов с векторами и цепочками
* Возможность расширения и кастомизации пайплайнов

https://developers.redhat.com/articles/2025/03/10/retrieval-augmented-generation-nodejs-podman-ai-lab-react#node_js_rag_chatbot_recipe

✍️ @nodejs_lib
Хотите собрать первое приложение на React за 60 минут?

Присоединяйтесь к открытому уроку от OTUS. Без скучных теорий и банальных todo-листов: только практика, код и живое общение. Вы узнаете, зачем нужны хуки и как компоненты делают интерфейс «живым», и самостоятельно создадите интерактивную игру.

Урок пройдет в преддверии старта курса «React.js Developer». Каждый участник вебинара получит скидку на обучение.

Встречаемся 7 мая в 20:00 МСК, регистрируйтесь прямо сейчас, чтобы не пропустить: https://vk.cc/cLCq23

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Повышение надёжности загрузок Node.js

Node.js уже давно предоставляет двоичные файлы (binary) через https://nodejs.org/download, однако в последние годы это решение стало сталкиваться с рядом проблем:

* Надёжность — иногда пользователи сталкиваются с перебоями в доступе к скачиваемым файлам.
* Масштабируемость — всё больше пользователей и CI/CD-систем используют Node.js, увеличивая нагрузку.
* Геораспределённость — скорость загрузки может значительно варьироваться в зависимости от региона.

Что изменится?

Команда Node.js работает над тем, чтобы перенести хостинг загрузок на более надёжную инфраструктуру — Fastly CDN. Это позволит:

* Снизить количество ошибок при скачивании.
* Повысить скорость загрузки по всему миру.
* Обеспечить лучшую устойчивость к пиковым нагрузкам.

Переходный период

В ближайшие месяцы будет происходить поэтапный переход. Команда уделяет особое внимание совместимости и минимизации сбоев:

* Старые URL будут продолжать работать.
* CI/CD системы не потребуют немедленных изменений.
* Пользователям рекомендуется следить за анонсами и при возможности обновить конфигурации.

Почему это важно?

Переход на CDN — это важный шаг для обеспечения надёжности экосистемы Node.js. Надёжные и быстрые загрузки особенно важны для разработчиков, DevOps-инженеров и автоматизированных систем сборки.


https://nodejs.org/en/blog/announcements/making-nodejs-downloads-reliable

✍️ @nodejs_lib
Не просто кнопка "Загрузить": Секреты работы с файлами в React

🎓 19 мая в 20:00 — бесплатный вебинар для разработчиков, которые хотят делать удобную и безопасную загрузку файлов в React-приложениях.

Что покажем:
— Drag & Drop, предпросмотр, валидация — всё, что ждали от UX;
— Обработка PDF, Excel и изображений прямо в браузере;
— Как не «положить» интерфейс при загрузке тяжёлых файлов;
— Защита от XSS, проверка MIME-типов и другие нюансы безопасности.

📌 Для фронтендеров и fullstack-разработчиков, которым важна клиентская оптимизация.

В программе — реальные примеры кода, которые можно сразу использовать.
Урок пройдет в преддверии старта курса «React.js Developer». Каждый участник вебинара получит скидку на обучение.

Регистрация: https://vk.cc/cLZMzs

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
💡 Парсинг неструктурированных DOCX в TypeScript/Node.js: как я решил нетривиальную задачу

Недавно я взял фриланс-проект, где нужно было преобразовать «почти неструктурированные» DOCX-файлы в структурированные данные, например, в JSON. Сначала я думал, что справлюсь за пару дней. Но в итоге потратил больше пяти.

📄 Что такое «почти неструктурированные» DOCX?

Файлы генерируются сервером и содержат несколько статей. Каждая статья обычно включает заголовок, автора, дополнительную информацию и резюме. Однако структура варьируется: где-то нет автора, где-то несколько, а вместо резюме — комментарии.

🔍 Проблемы с существующими библиотеками:

* officeparser: извлекает только текст, без структуры.
* docx4js: не имеет типов для TypeScript и сложно использовать.
* docx: больше подходит для создания DOCX, а не для парсинга.

🛠️ Моё решение:

Поняв, что DOCX — это ZIP-архив с XML-файлами, я решил сам обработать document.xml. Использовал fast-xml-parser для преобразования XML в JS-объекты. Однако структура XML оказалась сложной, и пришлось разбираться в ней вручную.

📌 Вывод:

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

https://nguyenhuythanh.com/posts/unstructured-ish-docx-parsing/

✍️ @nodejs_lib
💻 Хотите стать востребованным Fullstack-разработчиком?
Откройте для себя новые возможности с обучением OTUS!

❗️На курсе вы научитесь всему, что нужно для того, чтобы стать универсальным разработчиком, который создает как фронтенд, так и серверную часть веб-приложений. Освоите: HTML, CSS, JavaScript, React, TypeScript, Node.js и многое другое. Пройдете все этапы разработки, от верстки до серверной настройки.

По окончании программы у вас будет:
3 реальных проекта в портфолио
Навыки, необходимые для работы в крупных компаниях
Готовность к собеседованиям
Уверенное понимание процесса разработки
Возможность участвовать в интересных проектах

➡️ Оставьте заявку прямо сейчас: https://vk.cc/cMclvN

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работает Node.js

После прочтения этой статьи вы хорошо поймете следующее:

🟢как работает цикл событий (event loop) в Node.js, включая все его фазы
🟢как Node.js выполняет JavaScript в одном потоке (single thread)
🟢как Node.js использует библиотеку libuv и внутренние API для обработки асинхронных операций
🟢почему знание работы цикла событий так важно для написания эффективного серверного кода

Понять, как JS работает "под капотом" в браузере (см. эту короткую 15-минутную статью), проще, чем понять устройство Node.js. В браузере нет сложных фаз и многослойных механизмов, как в Node.js.


Но почему в Node.js все устроено сложнее? Зачем столько фаз, которые так непросто понять?

https://habr.com/ru/companies/timeweb/articles/910514/

original https://www.deepintodev.com/blog/how-nodejs-works-behind-the-scenes

✍️ @nodejs_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Открой для себя идеальный путь к лидерству с карьерным тестом от ОЭЗ «Алабуга»! 🌟

Мечтаете о карьере в крупной компании, где ваш потенциал раскроется на полную? Наш тест поможет вам определить вашу уникальную лидерскую роль. Может быть, именно вы станете тем лидером, который выведет команду на новый уровень?

После прохождения теста вы можете заполнить заявку и получить приглашение на эксклюзивную лидерскую программу. Участие в программе открывает реальные перспективы трудоустройства в ОЭЗ «Алабуга», предоставляя шанс начать путь к профессиональному признанию.

Сделайте первый шаг к своему будущему сегодня! Пройдите тест, подайте заявку и начните строить свою карьеру вместе с нами. 🎯
Оптимизация производительности Node.js: управление памятью V8 и настройка сборщика мусора

Часто разработчики на Node.js замечают, что память их приложения, измеряемая Resident Set Size (RSS) операционной системы, кажется постоянно растущей. Такое увеличение RSS обычно вызывает опасения по поводу утечек памяти.

В результате многие промышленные среды настраивают инструменты мониторинга и оркестрации, такие как Kubernetes или Docker Swarm, на автоматический перезапуск или завершение процессов Node.js, когда их RSS превышает определённый процент от выделенного лимита памяти — обычно около 80 %. Считается, что высокий RSS неизбежно указывает на серьёзную проблему с памятью, требующую вмешательства.


https://blog.platformatic.dev/optimizing-nodejs-performance-v8-memory-management-and-gc-tuning

✍️ @nodejs_lib
💻 Хотите освоить основы веб-разработки с нуля? Откройте для себя важнейшие инструменты HTML

На открытом вебинаре вы подробно разберетесь:

▸ С основными HTML-тегами.
▸ Научитесь применять их атрибуты для стилизации и функциональности.
▸ Мы покажем, как правильно структурировать контент с использованием семантической разметки.
▸ Что поможет вам улучшить SEO и доступность веб-страниц.

🔹 Вы узнаете, как создавать веб-страницы, которые не только выглядят красиво, но и эффективно работают на поисковики и доступны для пользователей с ограниченными возможностями.

📅 Урок 17 июня в 19:00 МСК проходит в преддверие старта курса «Fullstack Developer», все участники получат скидку 5% на обучение по промокоду FULLSTACK_6

🔴 Регистрация открыта: https://vk.cc/cMHg7M

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Лучшие инструменты наблюдения за Node.js в 2025 году: N|Solid против New Relic, Datadog и других

Эффективный мониторинг приложений на Node.js уже давно не является опцией — это необходимость для обеспечения производительности, надёжности и плавного пользовательского опыта. При наличии множества инструментов для наблюдения и APM выбор подходящего для вашего стека и команды может оказаться непростой задачей. Независимо от того, отслеживаете ли вы утечки памяти, скачки загрузки ЦП или асинхронные узкие места, правильный стек наблюдения сэкономит вам часы на отладке и защитит впечатления ваших пользователей.

https://nodesource.com/blog/nodejs-observability-tools-2025

✍️ @nodejs_lib
2025/06/14 10:51:23
Back to Top
HTML Embed Code: