Обновить
64K+

Node.JS *

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

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

Когда curl перестаёт работать: многоуровневый детект ботов и где в этой схеме живёт облачный браузер

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

Эта статья не о том, что Puppeteer плохой инструмент. Puppeteer — отличный. И грамотный TLS-фингерпринтинг вынесет большинство защит. Но есть класс задач, где даже идеальный сетевой стек не спасает — потому что детект давно приземлился на уровень поведения рендеринг-движка. Разберём, как Cloudflare и Akamai палят вас через WebGL и Canvas, и почему "чистый" код больше не работает.

Вскрываем антифрод

Сборка мусора в V8: Scavenger, Mark and Sweep и Tri-color Marking

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели6.4K

В части 1 мы выяснили, что объекты в Heap не освобождаются сами по себе этим занимается Garbage Collector. Но как именно GC решает, что можно удалить? Если подумать, задача не такая очевидная: объект не нужен - понятие логическое, а GC работает с физическим графом ссылок.

Ответ в том, что GC не пытается угадать намерения программы. Он задаёт более простой вопрос: можно ли добраться до этого объекта из работающего кода? Если нельзя объект недостижим, и никакой код уже не сможет его использовать. Значит, память можно вернуть.

Алгоритм, реализующий эту логику, называется Mark and Sweep.

Читать далее

Я просто хотел, чтобы код от Claude не поломался через месяц. Пришлось сделать runtime для воспроизводимости AI-кода

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели14K

AI-агенты пишут код за секунды.
Через месяц этот код начинает ломаться — не из-за багов, а потому что мир вокруг него изменился.

Я столкнулся с этим, когда Express API, сгенерированный Claude, умер через 28 дней.
Перегенерация помогала… ровно до следующего обновления зависимостей.

В итоге я попытался решить не проблему кода, а проблему воспроизводимости AI-решений — и случайно пришёл к идее CI/CD для мира, где код пишет не человек, а модель.

В статье — про «гниение» AI-кода, Execution Plans, проверку смысла вместо проверки файлов и почему в большинстве случаев чинить можно без повторного вызова LLM.

Читать далее

Выполнение HTTP-запросов в Node.js

Время на прочтение20 мин
Охват и читатели7.2K

Долгое время я использовал пакет request (теперь устаревший) для выполнения HTTP-запросов в Node.js. Затем в моду вошли промисы (promises), и я переключился на request-promise (также ныне устаревший). Затем я начал использовать axios и думал, что на этом все... но ошибался. История HTTP в Node.js продолжает эволюционировать, и это прекрасно.

Выполнение запросов HTTP - одна из самых распространенных задач в Node.js. Будь то обращение к API, получение данных из внешнего сервиса или разработка веб-скрейпера (scraper), важно знать, как делать это эффективно. Хорошая новость состоит в том, что начиная с Node.js 18 в качестве глобальной переменной доступен стандартный fetch(). Если вы использовали fetch() в браузере, то уже знаете, как использовать его на сервере. Никаких дополнительных зависимостей, никаких оберток, только тот же знакомый API, предоставляющий все необходимое для выполнения запросов HTTP современным способом в Node.js.

Читать далее

Память в JavaScript: Stack и Heap

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели9.8K

Последние пару лет изменили то, как пишется код. Copilot, Cursor, ChatGPT, Claude - все это генерирует вполне работающий JavaScript быстрее, чем успеваешь сформулировать задачу. Это удобно. Но у этого удобства есть обратная сторона, сгенерированный код работает правильно в смысле делает что просили, но не всегда правильно в смысле не течет по памяти и не роняет прод под нагрузкой.

Модели хорошо знают синтаксис и паттерны. Они значительно хуже разбираются в том, что происходит под капотом конкретного движка. Closure, захватывающий лишние данные. Event listener, который никогда не снимается. Объект, который непреднамеренно продлевает жизнь половине DOM дерева. Все это - настоящие ошибки, которые реально встречаются в проде и ни один линтер их не поймает.

Чтобы замечать такие вещи при ревью, нужно понимать, как именно V8 хранит объекты и когда решает их удалить. Это не академическое знание - это инструмент, который меняет то, на что смотришь в коде.

Эта серия состоит из трех частей. Первая - про то, как V8 вообще организует память, что такое Stack и Heap, чем они отличаются и что такое pointer. Вторая - про сборщик мусора, как он определяет, что живо, а что нет и как делает это, не останавливая программу надолго. Третья - практическое применение, откуда берутся утечки памяти, как их искать и как писать код, который не создает лишней работы для GC.

Смотреть под капот

Как я решил вкатиться в Android разработку через вайбкодинг. Часть 2. Ну или разработка мобильного приложения через ИИ

Время на прочтение28 мин
Охват и читатели9.1K

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

Читать далее

Согласованность API по принципу единого источника истины

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

Представим ситуацию: идет тяжёлый спринт, вы выполнили кучу задач, написали тонну нового функционала, готовитесь к релизу и вдруг обнаруживайте, что часть фич перестала работать! Идёте разбираться и обнаруживайте, что оказывается бэкендер Вася в последний момент решил переименовать поля в json-е, а вам об этом не сказал!

Ситуация образная, но позволяет быстро обрисовать одну из болей во время разработки. В этой статье я бы хотел рассказать об одном из вариантов её решения в коде с помощью подхода Единого источника истины(Single source of truth).

Читать далее

Пишем плагин для semantic-release

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

Вы когда-нибудь писали плагин для semantic-release? А хотели бы? Если да, то идем дальше. Расскажу, как это сделать и самое главное это не сложно. А в конце Вас ждет репозиторий, который вам поможет начать проект.

Привет! Меня зовут Алексей, я работаю в команде Авторизации Банки.ру. Сегодня хочу познакомить Вас с тем, как можно написать свой плагин для semantic-release.

Читать далее

Техническая реализация безопасной системы сделок через модель эскроу (не гаранты, а математика)

Время на прочтение11 мин
Охват и читатели6.4K

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

Показываем, как реализовать технические гарантии безопасности сделок с помощью MultiSig-кошельков, Node.js, smart-контрактов, TronWeb v5. Разбираем код и логику проектирования P2P-платформы, которая не может украсть деньги пользователя (даже если захочет) 👇

Читать далее

Подключаем российские AI-сервисы к OpenClaw: GigaChat, YandexGPT и Yandex 360

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели21K

Интегрируем российские AI-сервисы (GigaChat от Сбера, YandexGPT и Yandex 360) с OpenClaw — open-source платформой для AI-агентов. Создаём русскоязычных агентов, подключаем CalDAV календарь и Yandex Disk. Все с нуля, с кодом и troubleshooting.

Читать далее

Книга: «Эффективный Node.js»

Время на прочтение2 мин
Охват и читатели10K

Привет, Хаброжители! Node.js — это технология, которая изменила современный веб. Более 10 миллионов разработчиков по всему миру используют ее для создания быстрых и масштабируемых приложений.

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

Вы научитесь создавать надежные, быстрые и масштабируемые приложения, востребованные в таких компаниях, как Amazon, Netfl ix, LinkedIn.

Читать далее

Глобальная область видимости в JavaScript

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

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

Глобальная область видимости может принимать различные формы в зависимости от того как загружаются код JS...

Какие ещё формы?

Батчинг запросов в Prisma: объединяем несколько запросов в один вызов БД

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели6.8K

В версии 1.58.0 библиотеки prisma-sql появился метод $batch, который позволяет выполнять несколько Prisma-запросов за один раунд-трип к базе данных.

Читать далее

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

Ошибка в $5 000 на TON из-за кода, написанного нейронкой

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

Наконец таки статья о том как я облажался. Точнее — как облажалась команда, но ответственность все равно моя. Это разбор конкретной ошибки, которая стоила реальных денег.

Читать далее

MongoDB, Clerk и Nginx-прокси: строим горизонтально масштабируемую архитектуру почти бесплатно

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.5K

Что делать, если после статьи на Хабре количество пользователей выросло вдвое (даже если их стало всего десять)? В этой статье я пройду путь от "крепкого" монолита до взрослой архитектуры с разделением на API, Web и Auth. Поделюсь опытом создания изолированного тестового контура и разберу, почему модная связка Bun + Vercel на реальном продакшене может стоить вам нескольких седых волос и часов дебага.

Заглянуть под капот

Moltbot: 83 сценария использования open-source AI-агента

Уровень сложностиСложный
Время на прочтение8 мин
Охват и читатели16K

Бесплатный агент с 100K+ звёзд на GitHub, который реально выполняет задачи — не просто отвечает текстом.

Читать далее

Реально ли вайбкодингом без профильных знаний написать простую игру и захватит ли ИИ программистов в ближайшем будущем?

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

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

Читать далее

Инвестиционные боты (почти) с нуля. Часть 2: свечи и индикаторы

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели5.5K

Всем привет.

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

Читать далее

Serverless паттерн Lambdalith или «Монолитная лямбда»

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели9.3K

Здравствуйте, товарищи! Недавно мне понадобилось сделать простой бэкенд для онлайн-песочницы в своем open source проекте. Сейчас для таких задач есть много конструкторов и low-code решений, типа n8n. Но я "по старинке" решил взять serverless с лямбдами, поскольку в позапрошлой компании плотно работал с этим стеком.

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

Читать далее

Всплытие переменных и функций в JavaScript

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели7.4K

В JavaScript есть уникальная особенность, переменную или функцию можно использовать по коду выше, её объявление...

Ииии что это за особенность?