Рубрика «фронтенд»

Полгода назад я закрыл замечание аудита «на сайте нет CSP» — прописал
Content‑Security‑Policy с白 списком хостов, проверил, что ничего не отвалилось,
и забыл. За три дня на прошлой неделе я нашёл три интеграции, которые эта
политика убила молча. Ни одна из них не оставила следа на сервере.

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

Симптом

У меня есть страница «МКС онлайн»: живая позиция станции — широта, долгота,
высота, скорость. Позиция считается в браузере: SGP4 по свежим элементам NORAD,
Читать полностью »

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

Каково назначение хуков useMemo и useCallback? Какие ошибки и лучшие практики следует при их использовании, и почему удаление большинства из них может быть хорошей идеей?

Читать полностью »

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

С этим надо было что-то делать.


Решение: генерируемый API-клиент

Я начал использовать генерируемый API-клиент. По сути, это набор ручек (функций для запросов) и типов к ним, которые генерируются на основе открытого API - yaml-файла сваггера.

Читать полностью »

История о том, как задача «подсветить обязательные поля» превратилась в полноценную TypeScript-библиотеку с 500+ скачиваниями в неделю.

Введение

Читать полностью »

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

Для удобства далее буду называть enum по-русски — энумы.

Для чего используется enum

Энумы (“перечисление”, сокращение от enumerable) — это тип данных в TypeScript, который представляет собой набор фиксированных, именованных констант.

Читать полностью »

Спустя 5 лет и $5 миллионов: почему создание нового языка для веб-разработки оказалось ошибкой - 1

Мы разрабатываем фулстек-фреймворк WaspЧитать полностью »

Привет! Меня зовут Вася Пикулев, я руковожу кор-командой веб- и Smart TV-клиентов в Окко. Стандарт WebMCP может изменить мою работу в ближайшие годы. И я хочу попробовать вместе с вами разобраться, что он нам несёт и какие открывает перспективы.


Представьте: один и тот же сайт. Один и тот же запрос пользователя к ИИ-агенту — подписаться на рассылку. Два способа выполнить.

Способ первый, сегодняшний.Читать полностью »

Разработка фронтенда интернет-магазина через Qwen 3.6 Plus и Qwen ClI - 1

Привет всем.

Расскажу про свой личный опыт разработки через Qwen 3.6 Plus и Qwen ClI. И да, статья полностью написана человеком.

Читать полностью »

Как всё началось

В августе 2024 я наткнулся на проблему в рабочем проекте на Next.js. Несколько страниц импортировали константы из общего файла через barrel (index.ts с реэкспортами). Каждая страница использовала 2-3 значения, но в бандл попадало всё — десятки неиспользуемых экспортов. Разница оказалась колоссальной: когда я добавил sideEffects: false и перешёл на direct export — бандл уменьшился в два раза.

Я завёл issue на GitHubЧитать полностью »

Вместо предисловия: проблема, которая бесила меня годами

У каждого из нас есть «чёрная дыра», куда уходят полезные ссылки. Кто-то сохраняет их в «Избранном» браузера, кто-то пишет сам себе в Telegram, кто-то держит десяток вкладок открытыми «на потом». У меня была та же проблема. Я пробовал Notion, Evernote, Google Keep, Obsidian - всё это мощные инструменты, но для простого «сохранить ссылку и не забыть» они часто избыточны.

Так родилась идея KylikLink - минималистичного PWA-приложения для заметок и ссылок, которое работает без интернета и не требует регистрации.

Почему KylikLink?

Название составное: KylikЧитать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js