Быстрый совет: не используйте
Элемент
Проблема в том, что
Далее, скринридеры. Большинство скринридеров не озвучивают атрибут
Гораздо лучше вернуться к старому газетному стилю: в первый раз напишите полную фразу, а затем в скобках — аббревиатуру. После этого можете использовать только сокращение.
#a11y #HTML
<abbr>Элемент
<abbr> предназначен для обозначения аббревиатуры. Идея в том, что вы вставляете сокращение, а затем с помощью атрибута title показываете его полную расшифровку.<p>Без <abbr title="Cascading Style Sheets">CSS</abbr> любая HTML-страница будет выглядеть как простой текстовый документ из 90-х.</p>
Проблема в том, что
<abbr> — не интерактивный элемент. На него нельзя переключиться по табуляции. Он будет прочитан точно так же, как любое другое слово в предложении. Если навести мышь на элемент, вы увидите подсказку title. Но если вы используете клавиатуру — нет никакого способа её отобразить.Далее, скринридеры. Большинство скринридеров не озвучивают атрибут
title.Гораздо лучше вернуться к старому газетному стилю: в первый раз напишите полную фразу, а затем в скобках — аббревиатуру. После этого можете использовать только сокращение.
#a11y #HTML
👌4
Практическое руководство по элементу
Смещение контента при загрузке страницы, избыточный трафик на мобильных устройствах, потерянные баллы Core Web Vitals — всё это часто следствие недооценки возможностей элемента
В новом руководстве рассматриваются ключевые аспекты работы с изображениями в HTML:
✅ указание
✅ адаптивность через
✅ поддержка современных форматов (AVIF, WebP) с помощью
✅ управление приоритетами загрузки:
✅ стратегия для LCP с предварительной загрузкой адаптивных изображений.
В финале — сравнение ручного подхода и использования Image CDN с акцентом на практическую целесообразность.
🖥 Читать статью
📱 @dev_notes_ru
#HTML #LCP #CoreWebVitals
<img>: от основ до LCPСмещение контента при загрузке страницы, избыточный трафик на мобильных устройствах, потерянные баллы Core Web Vitals — всё это часто следствие недооценки возможностей элемента
<img>.В новом руководстве рассматриваются ключевые аспекты работы с изображениями в HTML:
width и height для предотвращения смещения макета (CLS);srcset и sizes — как браузер выбирает нужный размер;<picture>;loading, decoding, fetchpriority;В финале — сравнение ручного подхода и использования Image CDN с акцентом на практическую целесообразность.
#HTML #LCP #CoreWebVitals
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Taskfile: Когда пора отказаться от Makefile (а когда — нет)
Makefile — инструмент с почти полувековой историей, который продолжает оставаться стандартом во многих проектах. Однако его синтаксис, ориентированный на shell-сценарии, не всегда удобен при решении современных задач: кросс-платформенная работа, интерактивные запросы, модульная организация кода.
Taskfile предлагает альтернативную модель: конфигурация на YAML, где многие сложные сценарии реализованы как встроенные механизмы, а не требуют самодельных конструкций.
В статье рассматриваются ключевые различия между двумя подходами:
✅ документация и навигация по задачам;
✅ работа на разных операционных системах;
✅ инкрементальные сборки и контроль изменений;
✅ интерактивные сценарии и валидация;
✅ модульность и переиспользование конфигураций.
Также приводится три стратегии внедрения Taskfile в существующие проекты — от нового проекта до постепенного рефакторинга проблемных мест.
🖥 Читать статью
📱 @dev_notes_ru
#Taskfile #Makefile #DevOps #автоматизация #инструменты
Makefile — инструмент с почти полувековой историей, который продолжает оставаться стандартом во многих проектах. Однако его синтаксис, ориентированный на shell-сценарии, не всегда удобен при решении современных задач: кросс-платформенная работа, интерактивные запросы, модульная организация кода.
Taskfile предлагает альтернативную модель: конфигурация на YAML, где многие сложные сценарии реализованы как встроенные механизмы, а не требуют самодельных конструкций.
В статье рассматриваются ключевые различия между двумя подходами:
Также приводится три стратегии внедрения Taskfile в существующие проекты — от нового проекта до постепенного рефакторинга проблемных мест.
#Taskfile #Makefile #DevOps #автоматизация #инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
Проксирование
Стандарт Fetch не специфицирует проксирование HTTP-запросов, поэтому каждый серверный JavaScript-рантайм реализует эту возможность по-своему. В результате разработчики сталкиваются с несовместимостью решений при смене среды исполнения.
В статье рассматриваются следующие подходы:
✅ Bun и Deno — встроенная поддержка прокси через опции
✅ Node.js — два пути: глобальные переменные окружения или пакет
⚠️ Cloudflare Workers — отсутствие нативной поддержки и три архитектурных альтернативы (Docker-контейнер, TCP-сокеты, вынос логики в отдельный микросервис)
Также приведён чек-лист для проверки, действительно ли трафик идёт через прокси, и разбор типовых ошибок.
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript #Nodejs
fetch() в серверном JavaScriptСтандарт Fetch не специфицирует проксирование HTTP-запросов, поэтому каждый серверный JavaScript-рантайм реализует эту возможность по-своему. В результате разработчики сталкиваются с несовместимостью решений при смене среды исполнения.
В статье рассматриваются следующие подходы:
fetch()undici для per-request настройки⚠️ Cloudflare Workers — отсутствие нативной поддержки и три архитектурных альтернативы (Docker-контейнер, TCP-сокеты, вынос логики в отдельный микросервис)
Также приведён чек-лист для проверки, действительно ли трафик идёт через прокси, и разбор типовых ошибок.
#JavaScript #Nodejs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
JSON в браузере:
Спойлер: из JSON — это не замена
Кажется, что новый синтаксис
🔹 Пожизненное кеширование — данные останутся в памяти на всю сессию
🔹 Нет отмены запроса —
🔹 Минимум информации об ошибках — не поймёшь, 404 это или CORS
В статье сравнили оба подхода по безопасности, кешу, стримингу и контролю. В конце — готовый чек-лист: когда брать import, а когда только
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript #JSON #import #fetch
import или fetch — руководство по выборуСпойлер:
importfetch()Кажется, что новый синтаксис
import data from './file.json' with { type: 'json' } проще и современнее. Но у него есть три жёстких ограничения:🔹 Пожизненное кеширование — данные останутся в памяти на всю сессию
🔹 Нет отмены запроса —
AbortController не подключается🔹 Минимум информации об ошибках — не поймёшь, 404 это или CORS
В статье сравнили оба подхода по безопасности, кешу, стримингу и контролю. В конце — готовый чек-лист: когда брать import, а когда только
fetch с проверкой Content-Type.#JavaScript #JSON #import #fetch
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1🔥1
Валидация массивов в Laravel без N+1: Form Request как построитель контекста
Применение правила
В статье рассматривается метод решения этой проблемы с помощью
Основные темы:
— Анализ затрат стандартного правила
— Ограничения метода
— Реализация предзагрузки допустимых значений и легитимность расширения ответственности Form Request.
🖥 Читать статью
📱 @dev_notes_ru
#Laravel #PHP #Backend #ВалидацияДанных
Применение правила
exists к массивам в Form Request порождает проблему N+1 запросов: каждый идентификатор проверяется отдельным SQL-запросом. При росте количества элементов это создает неоправданную нагрузку на базу данных и увеличивает время ответа.В статье рассматривается метод решения этой проблемы с помощью
prepareForValidation(). Подход позволяет заменить серию отдельных запросов одним whereIn, сохранив при этом возможность точного указания ошибочного поля в ответе валидатора.Основные темы:
— Анализ затрат стандартного правила
exists для массивов.— Ограничения метода
after() в контексте сохранения структуры ошибок.— Реализация предзагрузки допустимых значений и легитимность расширения ответственности Form Request.
#Laravel #PHP #Backend #ВалидацияДанных
Please open Telegram to view this post
VIEW IN TELEGRAM
Статические переменные в PHP: использование
По данным исследования Exakat, конструкция
В статье рассмотрены:
✅ Критерии допустимости использования в CLI-скриптах и средах с постоянными воркерами.
✅ Изменение поведения статических переменных при наследовании методов в PHP 8.1.
✅ Возможность динамической инициализации выражениями в PHP 8.3.
Практическое применение метода и альтернативы.
🖥 Читать статью
📱 @dev_notes_ru
#php #php8
static внутри функцийПо данным исследования Exakat, конструкция
static $var в теле функции встречается в каждой третьей PHP-кодовой базе. Несмотря на удобство реализации ленивой инициализации и мемоизации, этот подход сопряжён с рядом архитектурных ограничений.В статье рассмотрены:
Практическое применение метода и альтернативы.
#php #php8
Please open Telegram to view this post
VIEW IN TELEGRAM
Уникальный индекс при мягком удалении: решаем проблему дубликатов
При использовании мягкого удаления стандартный уникальный индекс перестаёт выполнять свою функцию: запись помечена как удалённая, но её данные по-прежнему участвуют в проверке уникальности. Результат — пользователь не может восстановить аккаунт на прежний e-mail.
В новом материале рассмотрены два способа решения этой архитектурной задачи:
✅ Частичные индексы в PostgreSQL — условие
✅ Генерируемые столбцы в MySQL — использование семантики
Оба метода разобраны с готовыми миграциями для Laravel и интеграционными тестами. Также затронуты вопросы производительности, восстановления записей и соответствия GDPR.
🖥 Читать статью
📱 @dev_notes_ru
#SoftDelete #Laravel #Eloquent #PostrgeSQL #MySQL
При использовании мягкого удаления стандартный уникальный индекс перестаёт выполнять свою функцию: запись помечена как удалённая, но её данные по-прежнему участвуют в проверке уникальности. Результат — пользователь не может восстановить аккаунт на прежний e-mail.
В новом материале рассмотрены два способа решения этой архитектурной задачи:
WHERE deleted_at IS NULL прямо в определении индекса.NULL в составном уникальном ключе.Оба метода разобраны с готовыми миграциями для Laravel и интеграционными тестами. Также затронуты вопросы производительности, восстановления записей и соответствия GDPR.
#SoftDelete #Laravel #Eloquent #PostrgeSQL #MySQL
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1