Все потоки
Поиск
Написать публикацию
Обновить
28.64

Node.JS *

Среда для запуска JavaScript-приложений

Сначала показывать
Порог рейтинга
Уровень сложности

100K юзеров за 3 дня — как готовились к релизу

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров5.4K

Привет, Хабр!

В этой статье — история запуска Telegram Mini App, куда за трое суток пришло 100.000 реальных пользователей.

Покажу, как мы масштабировали Node.js приложения на многоядерных серверах, увеличивали RPS в 10 раз, боролись с N+1 проблемой в MongoDB и снижали нагрузку на CPU. А ещё расскажу как мы быстро настроили мониторинг через Grafana, подключили Cloudflare и интегрировали Sentry. Поделюсь практическими инсайтами о том, на что стоит обращать внимание в первую очередь, и как эти инструменты помогли нам оперативно находить узкие места и устранять сбои в реальном времени. Всё, о чём будет в этой статье, основано на том, что действительно сработало. Кроме того, расскажу, какие моменты мы упустили до запуска.

Это разбор с цифрами, графиками и практическими выводами. Он может сэкономить вам время, нервы и деньги, если вы готовитесь к запуску Telegram Mini App или просто работаете с Node.js-приложениями, которые могут оказаться под серьёзной нагрузкой.

Это первая часть истории — про то, как мы готовились к запуску, что предусматривали и на что делали ставку.

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

Читать далее

Фронтенд и бэкенд больше не будут общаться как прежде: создаём конструктор сценариев на базе Backend Driven UI

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров10K

Цикл продуктовой разработки часто напоминает весы: с одной стороны, системное проектирование, подбор основополагающих инструментов, масштабные рефакторинги. С другой — совокупность локальных решений, принимаемых для точечных улучшений в системе. И самое сложное тут: соблюдать баланс. Как понять, когда имеет смысл вмешаться «хирургически», а когда — предпочесть вместо конкретной проблемы решить (или предотвратить) целый класс проблем?  

Иногда нащупать границу между «масштабом» и «целесообразностью» получается почти что случайно. Однажды мы в Сравни подступились к переделке чата в нашем мобильном приложении, и на старте расценивали задачу как «ещё один рядовой продуктовый кейс». Но планы по модификации фичи быстро переросли в создание универсального инструмента: конструктора сценариев на базе Backend Driven UI.

В итоге мы не просто заменили чат более удобной альтернативой, а в целом научились гибко управлять фронтендом приложения. Со всеми сопутствующими плюсами как для бизнеса, так и для самих разработчиков (теперь, чтобы реализовать некоторые изменения на экранах, даже не обязательно быть фронтендером или мобильным разработчиком!).

Подробности о нашем сценарном BDUI-движке — этапах его создания, вариантах использования и нюансах технического устройства — читайте под катом.

Читать далее

Почему твой await fetch тормозит — и как это исправить

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров17K

Привет, Хабр!

В этой статье рассмотрим, почему безобидная строчка await fetch() неожиданно превращается в тормоз, где именно она зарывает драгоценные миллисекунды — и что можно сделать с этим.

Читать далее

Как работает Node.js

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров17K



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


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

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


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

Читать дальше →

Среда выполнения JavaScript простым языком: движок, Event Loop и очереди задач

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров9.4K

Привет, с вами снова я – Дмитрий, React-разработчик, хотелось бы сегодня затронуть тему среды выполнения JS. Многие знают, другие уже подзабыли, а новички — вовсе не в курсе. В общем, эта статья точно найдёт своих читателей. Постараюсь простыми словами и по делу.

Читать далее

Опыт работы с Serverless-архитектурой для Telegram-бота на Vercel и Timeweb Cloud

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.7K

В последнее время активно занимаюсь разработкой Telegram-бота с использованием Serverless-подхода в Timeweb и Vercel сервисах.

Читать далее

Работа с базой данных для джунов и вайбкодеров. Соединения

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2.2K

Коннекты обычно не приносят много головной боли на начальных этапах разработки. Вообще работа с ними обычно делается один раз, во время настройки, и дальше тюнится по необходимости. Но эта необходимость возникает часто в виде непонятных ошибок, которые выкидываются в случайных местах, непонятных графиков в графане и суеты админов вашей базы данных. Я постарался собрать ту информацию, которая позволит вам не потеряться в такой ситуации и даже поможет определить суть проблемы.

Читать далее

Автовыведение типов в TypeScript: мощь дженериков и функций

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров4K

Я уже более 7 лет активно использую TypeScript, применяя его в самых разных сценариях — от простых типизированных переменных до сложных условных типов и интерполяции. Однако TypeScript продолжает удивлять: сегодня я открыл для себя ещё один элегантный сценарий использования автовыведения типов в дженериках и функциях.

В этой статье разберём, как TypeScript автоматически выводит типы в дженериках на примере функции fetchFile из моего кода.

Читать далее

Создание Умной Документации на основе Встраиваний OpenAI (Деление на фрагменты, Индексация и Поиск)

Время на прочтение8 мин
Количество просмотров1.1K

Всем привет! Хочу поделиться своим подходом к созданию чат-бота с функцией «умной документации» для проекта, над которым я работаю. **Я не являюсь экспертом в области ИИ, поэтому любые предложения и улучшения приветствуются!**

Цель этой статьи — **не** создавать очередной туториал по сборке чат-бота с OpenAI. Таких материалов уже достаточно.

Вместо этого я расскажу, как **индексировать документацию**, разделив её на **удобоваримые фрагменты**, создать для них **векторные представления (эмбеддинги)** с помощью OpenAI и выполнять **поиск по схожести**, чтобы находить наиболее релевантную информацию по пользовательскому запросу.

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

---

## Зачем?

Потому что бывает сложно найти нужную информацию. Я хотел создать чат-бота, который может отвечать на вопросы по определенной теме и предоставлять соответствующий контекст из документации.

Такой ассистент может использоваться в разных сценариях:

- **Быстрые ответы на частые вопросы**

- **Поиск по документации как в Algolia**

- **Помощь пользователям в навигации по документации**

- **Анализ пользовательских вопросов и хранение их для анализа**

---

## Краткое содержание

Ниже приведены три основные части решения:

1. Чтение файлов документации

2. Индексация документации (разбиение, перекрытие, эмбеддинги)

3. Поиск по документации и интеграция с чат-ботом

---

## 1. Чтение файлов документации

Вместо того чтобы жестко прописывать текст, вы можете просканировать папку и найти все `.md` файлы с помощью `glob`.

Читать далее

CI/CD для чайников — разберитесь и начните автоматизировать рутину в разработке. Часть 3. Его величество, деплой

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров13K

Пишу про полезные материалы про IT, и собираю свой ламповый нетворкинг тут - https://t.me/+434aQiGpZtAyNTU6. Присоединяйтесь!

Оглавление.

Читать далее

Я знаю, что ты думал в прошлый дейлик

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров2.4K

На входе — обычный push. На выходе — коммит, улучшенный с помощью LLM, сохранённый в векторной базе, доступный для поиска и семантического анализа. Пишем простой MCP-сервер для трекинга изменений ваших проектов.

Читать далее

SSG своими руками

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров5.3K

Привет, Хабр!

Сегодня я хочу поделиться с вами руководством, как реализовать Static Site Generation (SSG) в React без использования сторонних фреймворков, таких как Next.js, TanStack Start, React Router и им подобных. Сразу оговорюсь: я не считаю их чем-то «плохим» и не агитирую против их применения. Всё гораздо проще: иногда по тем или иным причинам нет возможности использовать эти инструменты, или самостоятельная реализация оказывается предпочтительнее из-за количества изменений в кодовой базе.

Если вам интересна тема стратегий рендеринга веб-приложений, то прошу под кат.

Читать далее

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

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров2.1K

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

Читать далее

Ближайшие события

Как мобильное приложение для ВодоходЪ вырастило средний чек на 15%

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров994

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

Читать далее

Агрегатор Telegram барахолок с нуля. Технический разбор бэкенда и проблем

Уровень сложностиСложный
Время на прочтение15 мин
Количество просмотров2.3K

Привет, Хабр!

Начиная думать о следующем пет-проекте, мне хотелось решить какую-нибудь проблему, которая болит не только мне, но и людям вокруг. Взгляд пал на барахолки в телеграм чатах Грузии = потребность в поиске нужных вещей там без постоянного мониторинга десятка групп. Казалось бы, не так и сложно, но на деле я столкнулся с весьма интересными подводными камнями, о решении которых и хотелось бы тут рассказать.

Статья — технический разбор моей попытки построить сеть каналов‑барахолок в Telegram, которая включала бы в себя все объявления уже существующих и устранила фактор хаоса (спам, коммерция, мусорные сообщения). А так же поверх — бота с подпиской на объявления по ключевыем словам.

Читать далее

Пишем тесты в транзакциях вместе с MySQL

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.3K

Хочу поведать о своей библиотеке для написания тестов в транзакция при работе с MySQL.

Я люблю писать тесты для своего кода, но при этом не люблю писать моки и всю необходимую для них обвязку. Особенно это касается базы данных ибо как правило замокать вызовы внешних сервисов и очереди сообщений, еще не так сложно, а вот с БД все гораздо сложнее, ведь взаимодействие с ней обычно довольно «богатое». И это ведет к тому, что приходится писать много хрупких и утомительных моков, и при этом сами запросы к БД не покрываются тестами (а там зачастую могут таиться ошибки связанные с некорректными запросами или ошибками миграции схемы).

Читать далее

ReCAPTCHA Enterprise: подробный разбор способы распознавания и варианты обхода, какие решатели капчи существуют

Уровень сложностиПростой
Время на прочтение30 мин
Количество просмотров5.1K

Современные сервисы (вебсайты) повсеместно ставят для защиты капчу, усложняя жизнь разработчикам, SEO-специалистам и автоматизаторам (хотя изначально цель не в том, чтобы насолить автоматизаторам, а в том, чтобы минимизировать чрезмерную нагрузку на ресурс от таких вот ребят). Среди большого количества капч особняком стоит Google reCAPTCHA Enterprise – это одна из самых продвинутых систем защиты от ботов в этой линейке.

Читать далее

CI/CD для чайников — разберитесь и начните наконец-то автоматизировать рутину в разработке. Часть 2. Запускаем CI

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров13K

Список необходимых инструментов.

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

И на этом сервере, мы можем выполнять любой набор команд для автоматизации.🫡

Но самый важный момент на этом этапе – какие настройки должны быть на этом сервере? Какие программы, пакеты или библиотеки, должны быть установлены? В конце концов, какую операционную систему использовать? ⚠️

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

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

eslint . –fix

npm run build

Если попробовать перечислить, то получится следующий список

Читать далее

Как обрабатывать сделки Bitrix24 с помощью Flask и Node.js

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.4K

Привет, Хабр!

Сегодня мы будем строить сервис для автоматической обработки сделок в Bitrix24, используя Flask и Node.js.

Читать далее

Лучшие статьи Хабра в марте 2025 года

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров3.5K

Снова приветствую вас на ежемесячном дайджесте! Цель - разобраться, чем жил Хабр в марте 2025: какие темы вызвали жаркие споры, а какие прошли незамеченными.

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

Впереди - методология отбора, топ марта, анализ авторов и специальный раздел, где обсудим критику и её обоснованность.

Читать далее

Вклад авторов