Frontender Libs - обзор библиотек JS / CSS – Telegram
Frontender Libs - обзор библиотек JS / CSS
8.09K subscribers
2.04K photos
735 videos
4 files
247 links
Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront

Купить рекламу: https://telega.in/c/sWebDev
Download Telegram
Какая PHP функция предотвратит внедрение JS скрипта и преобразует его в тест?
Anonymous Quiz
48%
htmlspecialchars()
15%
trim()
13%
stripslashes()
24%
convert_uuencode()
HTML | PRELOAD & PREFETCH

Preload - говорит браузеру как можно скорее загрузить и кэшировать ресурс (например, скрипт или таблицу стилей). Это полезно, когда ресурс понадобится через несколько секунд после загрузки страницы — и вы хотите ускорить процесс.

<link rel="preload" href="/style.css" as="style" />

prefetch - просит браузер загрузить и кэшировать ресурс (например, скрипт или таблицу стилей) в фоновом режиме. Загрузка происходит с низким приоритетом, поэтому не мешает более важным ресурсам. Это полезно, если ресурс понадобится на следующей странице, а вы хотите заранее его кэшировать.

<link rel="prefetch" href="/style.css" as="style" />

Браузер ничего не делает с ресурсом после загрузки. Скрипты не выполняются, таблицы стилей не применяются. Ресурс просто кэшируется и немедленно предоставляется по запросу.
JS | Fetch

Fetch API - это более простая и удобная версия XMLHttpRequest. Fetch позволяет работать с REST API с дополнительными параметрами, такими как кэширование данных и многое другое. Основное отличие состоит в том, что Fetch работает с promise, а не callback.

fetch('https://api...')
// Handle success
.then(response => response.json()) // convert to json
.then(json => console.log(json)) //print data to console
.catch(err => console.log('Request Failed', err)); // Catch errors

Также можно передавать заголовки, используя свойство «headers»

fetch('https://jsonplaceholder.typicode.com/posts', {
method: "POST",
body: JSON.stringify(_data),
headers: {"Content-type": "application/json; charset=UTF-8"}
})
Как задать эффект плавного изменения только для свойства width?
Anonymous Quiz
46%
transition-property: width;
19%
transition-only: width;
30%
transition-width: 2s;
5%
transition: all;
Node.js | Обработка асинхронных ошибок

Если ошибка не обработана, то ваше приложение находится в неопределённом состоянии. try/catch c синхронными ошибками работает замечательно, но в Node.js лучше всего писать асинхронный код, чтобы не блокировать thread.

Некоторые способы обработки асинхронных ошибок:
- Прослушиваем все сообщения об ошибках (on error).

server.on('error', function (err) {
console.error(err)
process.exit(1)})

- Прослушиваем uncaughtException в объекте process.

process.on('uncaughtException', function (err) {
console.error('uncaughtException: ', err.message)
console.error(err.stack)
process.exit(1)})

В статье вы найдете больше практик для обработки ошибок.
PHP | Files mode

Функция fopen() - принимает вторым параметром режим работы с файлом.

fopen("\resource.txt", "r");

Основные режимы:
- 'r' - Открывает файл только для чтения; помещает указатель в начало файла.
- 'r+' - Открывает файл для чтения и записи; помещает указатель в начало файла.
- 'w' - Удаляет содержимое файла. Если файл не существует - пробует его создать.
- 'w+' - Открывает файл для чтения и записи. Удаляет содержимое файла. Если файл не существует - пробует его создать.
- 'a' - Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.
- 'a+' - Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.
Как в MySQL выбрать только 3 первых записи?
SELECT * FROM table ...
Anonymous Quiz
21%
WHERE TOP 3
56%
LIMIT 3
16%
WHERE ROWNUM <= 3
7%
ONLY 3
JS | Moment.js

Moment.js - библиотека для форматирования даты в нужном вам формате. Работает в браузере и с Node.js. Легко подключается и настраивается и при этом работает динамично со всеми временными зонами.

Поддерживает:
- Текущие даты
moment().format("MMM Do YY");               // авг. 27-го 20
moment().format('YYYY [escaped] YYYY'); // 2020 escaped 2020

- Относительные
moment().endOf('day').fromNow();          // через 10 часов
moment().startOf('hour').fromNow(); // 13 минут назад

- Календарные
moment().calendar();                      // Сегодня, в 14:12
moment().add(1, 'days').calendar(); // Завтра, в 14:12

- Локальные
moment.locale();         // ru
moment().format('LT'); // 14:12
This media is not supported in your browser
VIEW IN TELEGRAM
CSS | SKEWED

Реализация с помощью transform: skew и небольшого скрипта на JS
Как установить breakpoint в 3 строчке js файла в Node.js?
debug< ...
Anonymous Quiz
18%
setBreakpoint('js.js'): 3
25%
setBreakpoint('js.js', sub(3))
53%
setBreakpoint('js.js', 3)
5%
setBreakpoint('js.js')< 3
PHP | Filters

filter_var() — Фильтрует переменную с помощью определенного фильтра
filter_var(variable, filter, options)

Как переменные можно фильтровать?
- Убрать HTML теги
$comment = "<h1>Hey there! How are you doing today?</h1>";
$sanitizedComment = filter_var($comment, FILTER_SANITIZE_STRING);
// Hey there! How are you doing today?

- IP Адрес
$ip = "172.16.254.1";
if(filter_var($ip, FILTER_VALIDATE_IP)){
echo "The <b>$ip</b> is a valid IP address";
}

- Почту
$email = "someone@@example.com";
$sanitizedEmail = filter_var($email, FILTER_SANITIZE_EMAIL);
if($email == $sanitizedEmail && filter_var($email, FILTER_VALIDATE_EMAIL)){
echo "The $email is a valid email address";
}

А так же почти все остальные типы данных.
SQL | ALL и ANY

ALL & ANY - логические операторы в SQL. В результате они возвращают boolean значение.
ANY возвращает true, если какое-либо из значений подзапроса соответствует условию. Оператор ALL возвращает true, если все значения подзапроса удовлетворяют условию.

Рассмотрим пример:

SELECT id, name FROM goods WHERE id > ALL (SELECT id FROM goods WHERE availability)

Условие удовлетворяют только те строки, id которых (в нашем случае это 4 и 5), больше любого из найденных значений в подзапросе (1, 2 и 3). 4 больше чем 1 и чем 2 и чем 3. 5 аналогично.

Заменим ALL на ANY
SELECT id, name FROM goods WHERE id > ANY (SELECT id FROM goods WHERE availability)

Условие удовлетворяют только те строки, id которых (в нашем случае это 2, 3, 4 и 5), больше хотя бы одного из найденных значений в подзапросе (1, 2 и 3).
Node.js + Docker

Лучшие практики Docker с Node.js
- Используйте более компактныe образы Docker
- Используйте CMD ['node', 'server.js'] для запуска приложения, избегайте использования npm start
- Используйте .dockerignore, чтобы предотвратить утечку важных данных
- Очистите зависимости перед продакшеном RUN npm ci --production && npm clean cache --force
- Установите ограничения виртуальной памяти как Docker, так и v8
- Очистите кеш NODE_MODULE после установки зависимостей

Еще больше практик с примерами в статье ниже.
Какой результат выполнения кода?
Anonymous Quiz
63%
3 elements
15%
Empty
11%
0 elements
12%
Error
PHP | Менеджер зависимостей

Аналогично пакетному менеджеру npm для node.js, для php так же существует и свой - Composer. После установки зависимостей через него достаточно подключить только один файл:
require 'vendor/autoload.php';

Преимущества использования
- Composer упрощает интеграцию библиотек
- Composer умеет обновлять используемые библиотеки
- Composer сам скачает все необходимые зависимости библиотеки

Небольшая шпаргалка по использованию
composer init - создать проект
composer require vendor/package - устанавливает библиотеку vendor/package
composer install - устанавливает все зависимости проекта
composer update - обновляет все зависимости
CSS | @supports

Долгое время веб-разработчикам приходилось прибегать к сторонним решениям для выяснения того, поддерживаются ли некие возможности CSS текущим браузером. После того, как в CSS появилась директива @supports, проверять возможности браузеров стало можно прямо из CSS-кода.

@supports (-webkit-line-clamp: 2) {
.el { /* ваш стиль */}
}
Если условие оказывается истинным ( браузер поддерживает свойство -webkit-line-clamp ), будет применён стиль, объявленный внутри директивы @supports.

Проверка на отсутствие поддержки какого-либо свойства:
@supports not (display: flex) {
div { float: left; }
/* задан альтернативный стиль */
}

Множественные проверки
@supports (display: -webkit-flex) or
(display: -moz-flex) or
(display: flex) {
/* добавляем сюда ваших стилей */
}
Что выведет консоль?
Anonymous Quiz
20%
"0true"
40%
NaN
34%
1
6%
0