Node.js + Docker
Лучшие практики Docker с Node.js
- Используйте более компактныe образы Docker
- Используйте
- Используйте .dockerignore, чтобы предотвратить утечку важных данных
- Очистите зависимости перед продакшеном
- Установите ограничения виртуальной памяти как Docker, так и v8
- Очистите кеш NODE_MODULE после установки зависимостей
Еще больше практик с примерами в статье ниже.
Лучшие практики Docker с Node.js
- Используйте более компактныe образы Docker
- Используйте
CMD ['node', 'server.js'] для запуска приложения, избегайте использования npm start- Используйте .dockerignore, чтобы предотвратить утечку важных данных
- Очистите зависимости перед продакшеном
RUN npm ci --production && npm clean cache --force- Установите ограничения виртуальной памяти как Docker, так и v8
- Очистите кеш NODE_MODULE после установки зависимостей
Еще больше практик с примерами в статье ниже.
PHP | Менеджер зависимостей
Аналогично пакетному менеджеру npm для node.js, для php так же существует и свой - Composer. После установки зависимостей через него достаточно подключить только один файл:
Преимущества использования
- Composer упрощает интеграцию библиотек
- Composer умеет обновлять используемые библиотеки
- Composer сам скачает все необходимые зависимости библиотеки
Небольшая шпаргалка по использованию
Аналогично пакетному менеджеру npm для node.js, для php так же существует и свой - Composer. После установки зависимостей через него достаточно подключить только один файл:
require 'vendor/autoload.php';Преимущества использования
- Composer упрощает интеграцию библиотек
- Composer умеет обновлять используемые библиотеки
- Composer сам скачает все необходимые зависимости библиотеки
Небольшая шпаргалка по использованию
composer init - создать проектcomposer require vendor/package - устанавливает библиотеку vendor/packagecomposer install - устанавливает все зависимости проектаcomposer update - обновляет все зависимостиCSS | @supports
Долгое время веб-разработчикам приходилось прибегать к сторонним решениям для выяснения того, поддерживаются ли некие возможности CSS текущим браузером. После того, как в CSS появилась директива @supports, проверять возможности браузеров стало можно прямо из CSS-кода.
Проверка на отсутствие поддержки какого-либо свойства:
Долгое время веб-разработчикам приходилось прибегать к сторонним решениям для выяснения того, поддерживаются ли некие возможности 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) {
/* добавляем сюда ваших стилей */
}This media is not supported in your browser
VIEW IN TELEGRAM
CSS | Map Creator
Выполнено с помощью препроцессора SCSS, где автор показал много его возможностей.
Выполнено с помощью препроцессора SCSS, где автор показал много его возможностей.
Где ошибка в запросе? SELECT (RAND() * NULL) == 0
Anonymous Quiz
19%
Отсутствует ; в конце запроса
41%
Попытка умножения на NULL
28%
Двойное равно
12%
Использование RAND()
JS | Array
Методы, которые не изменяют массив, а возвращают его в новом представлении:
concat() - возвращает новый массив, состоящий из данного массива, соединённого с другим массивом
Методы, которые не изменяют массив, а возвращают его в новом представлении:
concat() - возвращает новый массив, состоящий из данного массива, соединённого с другим массивом
['a', 'b', 'c'].concat([1, 2, 3])join() - объединяет все элементы массива в строку как toString(), можно указать свой разделитель.
// result in ['a', 'b', 'c', 1, 2, 3]
['Fire', 'Air', 'Water'].join('-')
// "Fire-Air-Water"
slice() - извлекает диапазон значений и возвращает его в виде нового массива.['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'].slice(2,4)toLocaleString() - возвращает локализованное строковое представление
// ["Lemon", "Apple"]
[1, 'a', new Date('21 Dec 1997 14:12:00 UTC')].toLocaleString('en', { timeZone: 'UTC' })
// "1,a,12/21/1997, 2:12:00 PM"
indexOf() - возвращает первый (наименьший) индекс элемента, или -1, если значение не найдено.['Fire', 'Air', 'Water','Air'].indexOf('Air')
// 1
lastIndexOf() -возвращает последний (наибольший) индекс['Fire', 'Air', 'Water','Air'].lastIndexOf('Air')
// 3Каков результат выполнения кода?
Anonymous Quiz
17%
740757
18%
36
43%
WARNING A non-numeric value encountered
21%
42
SQL | Произведение значений столбца
К сожалению, эту задачу нельзя решить стандартныйми функциями SQL практически ни в одной СУБД. Но можно пойти через свойства логарифмов: логарифм произведения равен сумме логаримов. Следовательно, если мы применим exp к сумме логарифмов значений, мы получим нужный результат:
Однако данное решение не будет работать с числами, которые меньше либо равны нулю, так как для них логарифм не определён.
Для учета "недопустимых" значений доработаем наше решение в соответствии со следующим алгоритмом:
- Если среди значений есть нули, то результатом будет 0.
- Если число отрицательных значений нечетное, то домножаем произведение абсолютных значений столбца на -1.
- Если число отрицательных значений четное, то результатом будет произведение абсолютных значений столбца.
В результате получаем возможность считать произведение значений столбца.
К сожалению, эту задачу нельзя решить стандартныйми функциями SQL практически ни в одной СУБД. Но можно пойти через свойства логарифмов: логарифм произведения равен сумме логаримов. Следовательно, если мы применим exp к сумме логарифмов значений, мы получим нужный результат:
SELECT exp(SUM(log(value))) product FROM (
VALUES (2),(3),(4),(5)
) X(value);Однако данное решение не будет работать с числами, которые меньше либо равны нулю, так как для них логарифм не определён.
Для учета "недопустимых" значений доработаем наше решение в соответствии со следующим алгоритмом:
- Если среди значений есть нули, то результатом будет 0.
- Если число отрицательных значений нечетное, то домножаем произведение абсолютных значений столбца на -1.
- Если число отрицательных значений четное, то результатом будет произведение абсолютных значений столбца.
В результате получаем возможность считать произведение значений столбца.
Какое CSS свойство позволяет печатать справа-налево?
Anonymous Quiz
15%
direction: rtl;
9%
writing-mod: vertical-rl;
40%
text-orientation: right;
36%
text-direction: rtl;
HTML | Target
Элемент
Его основные значения
_self — страница загружается в текущее окно ( по умолчанию );
_blank — страница открывается в новом окне браузера;
_parent — страница загружается во фрейм-родитель;
_top — страница загружается в полное окно браузера.
_new — страница загружается в новом окне, и все следующие переходы с этим атрибутом будут открываться в этом же окне ( где бы оно не находилось ).
Элемент
<a> поддерживает атрибут targetЕго основные значения
_self — страница загружается в текущее окно ( по умолчанию );
_blank — страница открывается в новом окне браузера;
_parent — страница загружается во фрейм-родитель;
_top — страница загружается в полное окно браузера.
_new — страница загружается в новом окне, и все следующие переходы с этим атрибутом будут открываться в этом же окне ( где бы оно не находилось ).
Node.js | node-fetch
node-fetch - npm пакет, который позволяет отправлять сетевые запросы на сервер (аналогично window.fetch браузерного API).
Преимущества
- Почти полностью совместим с window.fetch API
- Использует нативные потоки Node как для тела запроса, так и для ответа
- Использует нативные promise и async функции
node-fetch - npm пакет, который позволяет отправлять сетевые запросы на сервер (аналогично window.fetch браузерного API).
Преимущества
- Почти полностью совместим с window.fetch API
- Использует нативные потоки Node как для тела запроса, так и для ответа
- Использует нативные promise и async функции