Category : javascript

javascript
Часть 1. Как я делаю backend для браузерной игры три в ряд: server-driven контент, транзакции и иде…

Привет, Хабр.Я frontend-разработчик и большую часть времени работаю с Vue и TypeScript. В последнее время мне стало интересно глубже разобраться с backend-разработкой, но делать для этого отдельный учебный CRUD-проект не хотелось. Я уже сделал свою первую игру и написал о ней в этой статье. Новая игра задумывалась уже сложнее по механикам и без серверной работы в ней было не обойтись. Таким образом серверную часть я решил добавить в свою новую игру — 3D-игру три в ряд с персонажами, способностя…

  • понедельник, 17 августа 2026 г. в 00:00:09
javascript
TRON, Aptos и BSC в одной цепочке заражения: расследование JavaScript-загрузчика, связанного с Chai…

Введение16 июня 2026 года исследователи Checkmarx изучили кампанию ChainVeil, использовавшую npm-пакеты для распространения многоступенчатых JavaScript-загрузчиков. И как раз недавно одному из моих знакомых (не)посчастливилось получить один из ранее неизвестных экземпляров.Репозиторий с AI-агентом ему посоветовал... AI-агент. Да, отправной точкой заражения стала рекомендация от AI-помощника, а после клонирования репозитория и локального запуска антивирус прервал выполнение и классифицировал обн…

  • понедельник, 17 августа 2026 г. в 00:00:08
javascript
Когда setState недостаточно: как я написал транзакционный стейт-менеджер на TypeScript

Стейт-менеджеров в JavaScript уже столько, что идея написать ещё один выглядит немного сомнительно. Есть Redux Toolkit, Zustand, MobX, Jotai, XState и десятки менее известных библиотек. Почти для любого способа хранить состояние уже существует готовое решение. Но все же в качестве эксперимента, решил реализовать свою идею.Изначально я не собирался делать ещё один store с методами getState, setState и subscribe.Меня интересовала другая проблема. Во многих приложениях изменение состояния является…

  • понедельник, 17 августа 2026 г. в 00:00:05
javascript
Зачем всё так сложно: постановка и архитектура

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

  • понедельник, 17 августа 2026 г. в 00:00:04
javascript
Смена типа в объекте тоже не бесплатна

В прошлой статье про объекты и скорость доступа к известному полю я рассказал про hidden classes, inline cache и форму объекта. Практический совет там был простой: если поле опциональное, создай его сразу и положи null. Тогда экземпляры сохранят одинаковую форму.Совет рабочий, но неполный. Форма объекта у V8 может остаться прежней, а вот внутренний контракт хранения поля может измениться. Если горячая функция успела прогреться под старый контракт, V8 пометит её на деоптимизацию.Напомню, что для…

  • воскресенье, 16 августа 2026 г. в 00:00:07
javascript
Написал валидатор llms.txt на 64 тестах — и проверил, читают ли этот файл боты

Файл llms.txt предлагают класть в корень сайта с 2024 года: считается, что языковые модели прочитают его вместо того, чтобы разбирать вёрстку. Я написал для него генератор и валидатор, проделал 64 теста для отладки — и параллельно посмотрел, сколько раз ИИ-боты вообще запрашивают этот файл. Значения получились неутешительные, но валидатор всё равно оказался полезным. Ниже — устройство разбора, схема оценки и код.Что такое llms.txt и чем он отличается от llms-full.txtllms.txt — текстовый файл в …

  • суббота, 15 августа 2026 г. в 00:00:21
javascript
Ускоряем drop in replace Next.js в 100 раз. Часть 1

Как говорил классик: в 100 раз за Rust. Кажется, что название является кликбейтом. И такого быть в принципе не может. Но я запланировал цикл из трёх статей, в которых постараюсь рассказать, как достичь такого фантастического результата. Часть 1. Архитектура и бенчмаркиПоследние годы, если мы говорим о BFF, SSR, API routes, React Server Components или server-side fetch, мы почти автоматически думаем про JavaScript runtime. Node.js, Deno, Bun, много маркетинга, но парадигма одна: JS/TS исполняет…

  • суббота, 15 августа 2026 г. в 00:00:19
javascript
Use-As-Dictionary: как мы перестали отдавать один и тот же бандл по пять раз в день

Все цифры в статье - с нашего клиентского портала (CRA-сборка, React 16 (да, посмейтесь, а я поплачу ещё раз)). Размеры и дельты измерены локально на 18 реальных релизных сборках, поведение пользователей - из прод-таблицы логинов за 30 и 100 дней. Строки таблицы результатов, которые не измерены, а посчитаны по модели, помечены отдельно. Методика - в конце.У нас непрерывная поставка. В спокойный день один релиз, в шумный - восемь. За сто дней (4 мая - 10 августа) в клиентский портал уехал 81 рел…

  • суббота, 15 августа 2026 г. в 00:00:17
javascript
Encode, don't stringify — как JSON.stringify вам врёт

Помните, как лет 5–7 назад все сидели на Yup или Ajv и всех всё устраивало? Признаю, половину интернета устраивает до сих пор 🫡Потом появилось «Parse, don’t validate», стало настольной книгой для кучи разработчиков и в итоге выстрелило и у нас, в JavaScript и TypeScript. Тысячи библиотек со схемами — лучшее тому подтверждение 😁Но это уже решённая проблема, и статью вы открыли не ради неё. А вот что не решено:“Encode, don’t stringify”Или, проще говоря: НИКОГДА не используйте JSON.stringify в сво…

  • суббота, 15 августа 2026 г. в 00:00:16