Заметки разработчика
473 subscribers
667 photos
4 videos
1.16K links
Заметки о Frontend, Backend и немного DevOps. В основном о #PHP, #Laravel, #JavaScript, #HTML, #CSS, тестировании и настройке серверов.

https://www.dev-notes.ru

@snakenf
Download Telegram
#css #feature #frontend

CSSWG одобрила...
переменные в контейнерных запросах!

@dev_notes_ru
👍1
#js #JavaScript #tips #frontend #webdev

Хотите генерировать случайные цвета с помощью JavaScript?

Сейчас я покажу как это сделать 🎨.

@dev_notes_ru
👍1
#laravel #middleware #tips #php #backend

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

@dev_notes_ru
👍4
#laravel #eloquent #ORM #tips #php #backend

Laravel предоставляет отношения belongsToMany(), позволяющие формировать отношения "многие-ко-многим" между двумя различными моделями в приложении.

Примером такого отношения может служить модель User и Role, в которой одна роль может принадлежать многим пользователям, а один пользователь - многим ролям.

Мы создаем промежуточную/поворотную таблицу, чтобы отобразить отношения между этими двумя моделями.

Но знаете ли вы, что можно также сохранять временные метки, когда эти отношения были сформированы, используя метод withTimestamp() при создании отношений?


@dev_notes_ru
👍4
#css #frontend

Что, если использовать контейнерные единицы измерения для... всего

Однажды я спросил себя: а что, если использовать контейнерные единицы измерения для каждого элемента дизайна? Я задался этим вопросом, отчасти потому, что мне показалось, что ответ может быть таким: ну, тогда всё будет очень хорошо масштабироваться!

Контейнерные единицы измерения, если вы ещё не слышали о них, — это единицы измерения (такие, как px или rem, но более близкие к единицам измерения области просмотра, таким как vw или vi), имеющие размер в соответствии с контейнером, в котором они находятся.

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

📄 Читать статью

@dev_notes_ru
👍3
#laravel #vlade #tips #php #backend

Laravel Tip💡: Подсказки типов для Blade

Мы часто используем Blade, и если на что и можно пожаловаться, так это на подсказки типов. Однако эту проблему можно решить, определив блок @php для всех используемых переменных 🚀.

@dev_notes_ru
🔥4👎1😁1👌1
#php #tips #backend

Если хотите проверить, является ли строка действительным кликабельным URL, используйте метод filter_var() с параметром FILTER_VALIDATE_URL.

Один из упрощенных примеров - добавление префикса "https://", если пользователь его забыл.

@dev_notes_ru
👍4
#php #tips #frontend

Зачем нужна типизация массивов в PHP

В PHP уже давно существует возможность типизировать параметры методов и функций. Добавление типов в массивы (и просто добавление типов в целом) поможет при использовании IDE или статического анализа, а также поможет другим разработчикам в команде понять ваш код. Также это поможет избежать ошибок и сделает код чище и читабельнее.

В принципе, в любой версии PHP, можно сделать что-то вроде:

function getNames(array $input): array {
return array_map(function($item) {
return $item->getName();
}, $input)
}


Однако это мало говорит о типах, с которыми имеем дело.

📄 Читать статью

@dev_notes_ru
👍2
#css #tips #example #frontend

Арка (неполная обводка круга) с закругленными краями

Создание арки (неполной обводки круга) с закругленными краями с помощью нескольких строк CSS

Одиночный элемент (без псевдоэлемента)
Менее 10 объявлений CSS
Поддерживает градиентное окрашивание
Оптимизировано с помощью переменных CSS

.arc {
--b: 30px; /* the boder thickness */
--a: 220deg; /* control the progression */

width: 200px;
aspect-ratio: 1;
padding: var(--b);
box-sizing: border-box;
border-radius: 50%;
background: linear-gradient(#CC333F,#8A9B0F);
--_g:/var(--b) var(--b) no-repeat
radial-gradient(50% 50%,#000 calc(100% - 1px),#0000);
mask:
top var(--_g),
calc(50% + 50%*sin(var(--a)))
calc(50% - 50%*cos(var(--a))) var(--_g),
linear-gradient(#0000 0 0) content-box intersect,
conic-gradient(#000 var(--a),#0000 0);
}


👉 Пример на CodePen

@dev_notes_ru
🔥1
#laravel #collection #tips #php #backend

Методы Laravel Collection toArray и all часто используются как взаимозаменяемые. Однако toArray проверяет каждый элемент на наличие Arrayable и вызывает toArray() для этих элементов.

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

@dev_notes_ru
👍2
#MySQL #features #DB #DataBase

MySQL 9.0 Community Edition: Ключевые возможности и улучшения

Ознакомьтесь с новыми возможностями и улучшениями в MySQL 9.0 Community Edition, вышедшем 1 июля 2024 года. Обзор охватывает обновления типов данных, производительности и новых возможностей, ориентированных на современные приложения.

1 июля 2024 года вышла MySQL 9.0 Community Edition, названная "Инновационным релизом". Новая версия обещает повышенную производительность, гибкость и новые возможности, призванные удовлетворить динамичные потребности современных приложений. Но оправдает ли она надежды, особенно после бурного приёма MySQL 8.0? Давайте посмотрим, что может предложить MySQL 9.0.

📄 Читать статью

@dev_notes_ru
👍1
#laravel #eloquent #php #tips #backend

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

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

Это вызвало исключение LazyLoadingViolationException, потому что Laravel теперь пытался лениво загрузить эти недостающие вложенные отношения.

Чтобы избежать этой проблемы, всегда используйте метод loadMissing($relation) вместо метода load(), если не уверены, что отношения уже загружены.

@dev_notes_ru
👍1
#css #features #frontend

Предоставление определения типа для CSS с @property

Пишите более безопасный CSS, используя @property, позволяющий определять типы для пользовательских свойств. Узнайте, почему традиционные запасные значения могут не сработать и как функции @property повышают устойчивость определений пользовательских свойств.

Кроссбраузерной возможностью с момента выхода Firefox 128 в июле 2024 года стало новое at-правило @property, позволяющее определять типы, а также наследование и начальное значение для пользовательских свойств.

Разберёмся, когда и почему традиционные запасные значения могут не сработать, и как функции @property позволяют писать более безопасные и устойчивые определения пользовательских CSS свойств.

📄 Читать статью

@dev_notes_ru
👍2
#laravel #breeze #php #tips #backend #webdev

Совет Laravel Breeze.

Хотите добавить пункт меню в верхнюю навигацию?

Не забудьте сделать это в ДВУХ местах:
x-nav-link для десктопного меню
x-responsive-nav-link для мобильного меню

@dev_notes_ru
👍1
#laravel #eloquent #php #tips #backend

При использовании функции updateOrCreate() как узнать, была ли запись только что создана или только обновлена? Ну, вы можете использовать wasRecentlyCreated!

@dev_notes_ru
👍1
#laravel #db #database #mysql #backend

Разделение хостов баз данных для оптимизации в Laravel

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

Например, в MySQL производительность чтения может пострадать при одновременном выполнении операций записи, поскольку операции записи могут получить блокировки, которые могут задержать операции чтения, особенно если база данных интенсивно используется и количество одновременных операций велико.

Кроме того, в большинстве случаев дисковый ввод/вывод распределяется между операциями чтения и записи. Большие объёмы записи могут привести к задержке ввода/вывода, замедляя операции чтения.

📄 Читать статью

@dev_notes_ru
👍3
#laravel #tips #caching #example #php #backend

Пример кода Laravel: Кэширование.

Он взят из проекта с открытым исходным кодом pixelfed: не просто кэширование данных, а манипулирование их значениями.

Источник: https://github.com/pixelfed/pixelfed/blob/dev/app/Services/LikeService.php

@dev_notes_ru
👍21