Получи случайную криптовалюту за регистрацию!

Node.js Recipes

Логотип телеграм канала @node_recipes — Node.js Recipes N
Логотип телеграм канала @node_recipes — Node.js Recipes
Адрес канала: @node_recipes
Категории: Технологии
Язык: Русский
Количество подписчиков: 2.47K
Описание канала:

По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Співробітництво https://telegra.ph/node-recipes-01-19

Рейтинги и Отзывы

4.00

3 отзыва

Оценить канал node_recipes и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

2

4 звезд

0

3 звезд

0

2 звезд

1

1 звезд

0


Последние сообщения 37

2021-05-04 10:00:44 ​​Как использовать cron в Node.js?
#kubernetes #service #nestjs

Есть много бизнес задач делать что-то по расписанию. Для этого используют утилиту cron, а расписание описывают crontab выражением. Пример: задача – отправлять отчет на емейл каждый день в 3 часа ночи, график – 0 3 * * *. Разобраться с crontab поможет сервис crontab.guru

Реализовывать cron в #nodejs проекте можно по разному:
Cron вызов REST API. Потерян контроль, найти ошибку будет сложно.
Использование setInterval/setTimeout. Оставьте это авторам библиотек, сфокусируйтесь на бизнес домене.
На уровне кода cron можно реализовать одноименным пакетом. В Nest.js есть @nestjs/schedule. Стоить учесть, что только один Node.js процесс должен запускать cron, иначе приложение теряет масштабируемость. Решается введением master process.

На уровне операционной системы. Встроенный OS cron будет вызывать Node.js как CLI утилиту. Хорошо в виртуальных машинах, противопоказано внутри Docker контейнеров (избегайте порождающих процессов).
Для этого используем не библиотеку аля yargs, а cli-framework (см. clipanion и его аналоги).
Для Nest.js есть пакеты nestjs-command и nestjs-console.

Cloud Native подход. Зависит от облака и требуемого способа запуска (serverless или docker). Смотрим документацию облака и консультируемся с DevOps инженером.

Kubernetes native подход:
Cron на уровне кода, но его запуск только в одной реплике. Используется StatefulSets, а мастер реплика определяется через _0 postfix. Подробней
Cron на уровне кода, но вынесен в отдельный Deployment с одной репликой.
Если же задачи ресурсоемкие, то правильно использовать CronJob.

Выбирайте решение на правильном уровне!
643 views07:00
Открыть/Комментировать
2021-05-03 10:01:12 Что такое Race Condition на клиенте?
#architecture

В одном из #nodejs чатов задали вопрос: "как думаете, норм использовать API для начальной подгрузки большого кол-ва контента, а socket.io для отправки на клиент единичных данных?" (c) Так делать не стоит. Состояние при таком подходе будет зависит от того, в каком порядке пришли сообщения. Это называется Race Condition. Чтобы такой ситуаций не было, необходимо использовать только один протокол для получения данных.

Конкретный пример: вы делаете страницу Ethereum Blocks с live updates, получая начальные данные по REST и подпиской на обновления по WS. Клиент или теряет блок, или получить его дважды. Пускай скорость генерации блоков 1 в 13 секунд, а задержки данных между WS и REST 0.5 секунды. Расчет показывает, что есть 4% шанс не корректного поведения.

Варианты решения:
REST с запросами с setInterval – не верное архитектурное решение из-за повышенной нагрузки на сервер. Попытки решить через Etag
WS с созданием подписки на требуемые обновления. В момент создания подписки сервер отдает текущее состояние ресурса. Необходимо предусмотреть переконект с учетом последнего сообщения и множественные подписки.
Server Sent Events создан именно для таких случаев. Имеет переподключение из коробки, а подписка определяется по URL. Требует HTTP2, чтобы избежать ограничения браузера в 4 соединения. Имеет разную реализацию в браузерах, что решается с помощью event-source-polyfill. Имеет поддержку в Nest.js, см. server-sent-events
635 views07:01
Открыть/Комментировать
2021-05-02 10:01:20 How to Build and Run Node Apps with Docker and Compose
#worth_seeing #docker

Доклад с прошлого DockerCon. Он особенно полезен для начинающих #nodejs разработчиков. Если вы опытный разработчик, то рекомендую посмотреть весь плейлист, откуда взят этот доклад.
653 views07:01
Открыть/Комментировать
2021-05-01 17:00:59 Node.js Recipes pinned «Подборка node.recipes за апрель 2021 Рецепты для #nodejs разработчиков: Когда можно считать, что вышла новая версия Node.js? Как правильно настроить TypeScript в Node.js проекте? Как исправить код в node_modules? Как протестировать webhook локально?…»
14:00
Открыть/Комментировать
2021-05-01 17:00:59 Подборка node.recipes за апрель 2021

Рецепты для #nodejs разработчиков:
Когда можно считать, что вышла новая версия Node.js?
Как правильно настроить TypeScript в Node.js проекте?
Как исправить код в node_modules?
Как протестировать webhook локально?
Как изменить timezone (часовой пояс) в Node.js?
Сравнение Nest.js и Koa.js с точки зрения бизнеса
Как конфигурировать Node.js приложение?
Как узнать ip пользователя в Node.js?
Как в Node.js узнать местоположение пользователя?
Какую версию npm использовать? 
Как правильно написать package.json в проекте?
Как узнать источник соединение в БД?
Как вывести в браузер сколько времени обрабатывался запрос на сервере?
Как померять время выполнения команды в терминале?
Обзор Node.js v16: AbortController
Почему разработчикам необходимо знать Cloud сервисы?

freebies:
Как получить бесплатную Node.js сертификацию?
Free GitLab Certified Associate
Бесплатная месячная подписка на O'Reilly

Доклады, которые стоит посмотреть:
The Benefits of a “CLI First” Development Strategy
Serverless Sockets for Real Time 
GraphQL Summit Worldwide
Can we double HTTP client throughput?
Кодстайл и насилие
6 способов взломать твое JavaScript приложение

Конференции, которые стоит посетить:
OpenJS World 2021
StrapiConf
Подборка конференций от Cloud провайдеров
1.2K views14:00
Открыть/Комментировать
2021-05-01 13:00:48 Diagnostic Reports by Christopher Hiller
#worth_seeing #nodejs_api

Сегодня у нас доклад с Node+JS Interactive 2019. С 2020 года эту конференцию заменил OpenJS World (подробней тут). Доклад короткий, всего 20 минут. В нем Кристофер рассказывает зачем нужны Diagnostic Report и как использовать его утилиту report toolkit.

Ссылки из доклада:
документация
Slides
утилита report toolkit

В завершение, приведу пример как на Diagnostic Report  сделать аналог phpinfo():
exports.helloWorld = (req, res) => {
res.status(200).send(process.report.getReport());
};
599 views10:00
Открыть/Комментировать
2021-05-01 10:01:28
Вы заметили в вашем Docker Desktop вкладку Dev Environments? Там пока нет ничего кроме интро видео. Мы узнаем детали 27 мая на DockerCon Live 2021.

Бесплатная регистрация
#conference #docker #freebies
571 viewsedited  07:01
Открыть/Комментировать
2021-04-30 17:55:46 Почему разработчикам необходимо знать Cloud сервисы?
#cloud

В одном из #nodejs чатов прилетел вопрос "Подскажите, нужна либа которая из текста делает озвучку и сохраняет ее. Куда копать?" (c)

Вот варианты решения задачи Text-To-Speach:
Web Speech API, необходим запущенный браузера.
Использовать Node.js только для запуска child_process.
Vendor hosted, Использовать стороннего сервиса
Cloud Native, т.е. использования сервисов предлагаемых облаком

Когда бизнесу важна скорость выхода на рынок, то Cloud Native безусловный фаворит. Поэтому я бы рекомендовал начать с родного облака:

AWS предлагает Polly
GCP предлагает @google-cloud/text-to-speech
Azure предлагает microsoft-cognitiveservices-speech-sdk
585 viewsedited  14:55
Открыть/Комментировать
2021-04-30 10:01:30 Обзор Node.js v16: AbortController
#nodejs_api

16-ой версия #nodejs даст нам нативный AbortController. Он создан для отмены выполнение Promise-based функций. Это аналог DOM AbortController, который отменяет fetch запросы.

Ждем появления в коде и на собеседованиях abortable-функций. Уже сейчас SDK cloud-провайдеров (AWS, Azure, GCP) использует полифил. Пример кода:

import { AbortController } from "@azure/abort-controller";
// create a controller and get its signal
const controller = new AbortController();
const abortSignal = controller.signal;
// pass the abortSignal into the API you want to cancel
await blobClient.download({ abortSignal })
// then sometime later, cancel it!
controller.abort();

Для полноценного перехода пока не хватает AbortError. Об это есть issue. Надеюсь ее закроют до выхода 16-й LTS.
645 views07:01
Открыть/Комментировать
2021-04-29 14:30:49 ​​Как померять время выполнения команды в терминале?
#cli

TL;DR Используйте hyperfine

Стандартный способ померять время исполнения команды посредством time.
Пример: time npm run build.

Если time использовать в связке с curl, то можно узнать время выполнения запроса. Для такой задаче лучше подходит ab. Это сокращение от apache benchmark. Это команда отправляет не один запрос на указанный URL, а несколько. На основание результатов считаются статистики: средние, квартили и тп. Поэтому в название и есть benchmark.
Пример: ab -n 10 http://localhost:3000/

Для оценки cli команд тоже есть benchmark. Называется hyperfine. Он может сравнивать несколько команд, делать прогрев или подготовку.
Пример: hyperfine 'npm run build'.
Его удобно использовать в извечном холиваре #nodejs разработчиков: yarn vs npm. Вот так можно сделать сравнение для вашего проекта:
hyperfine --prepare 'rm -rf node_modules' 'yarn' 'npm install'
626 viewsedited  11:30
Открыть/Комментировать