Как вывести в браузер сколько времени обрабатывался запрос на сервере?
#package #browser
Сегодня посмотрим, как можно узнать:
- Как быстро браузер получил ответ?
- А сколько запрос обрабатывался на сервере?
Chrome показывает Server-Timing заголовки. Для этого:
1️⃣Открываем исследуемый ресурс и консоль разработчика.
2️⃣Переходим во вкладку Network.
3️⃣Выбираем нужный запрос.
4️⃣Переходим во вкладку Timing.
5️⃣Смотрим результат.
Есть уже готовый пакет server-timing. Меня он сильно выручил в ситуации, когда было не ясно тормозит #nodejs или load-balancer.
#package #browser
Сегодня посмотрим, как можно узнать:
- Как быстро браузер получил ответ?
- А сколько запрос обрабатывался на сервере?
Chrome показывает Server-Timing заголовки. Для этого:
1️⃣Открываем исследуемый ресурс и консоль разработчика.
2️⃣Переходим во вкладку Network.
3️⃣Выбираем нужный запрос.
4️⃣Переходим во вкладку Timing.
5️⃣Смотрим результат.
Есть уже готовый пакет server-timing. Меня он сильно выручил в ситуации, когда было не ясно тормозит #nodejs или load-balancer.
Бесплатная месячная подписка на O'Reilly
#freebies
Спасибо, что читаете мой канал об #nodejs. Я стараюсь сделать рецепты короткими, но полезными. Они такие, чтобы читать их на бегу.
К сожалению, книги так не почитаешь. А читать книги необходимо! Лучшие книги по разработке издает издательство O'Reilly (такие с животными на обложке). У них есть замечательный портал learning.oreilly.com. Помимо книг там есть видео и тренировочные сертификации. Отличный контент, который я люблю читать с планшета.
Одна беда – цена 50$/месяц, 500$/год.
У них есть trial 10 дней, но этого мало, чтобы прочитать книгу. По ссылке https://learning.oreilly.com/get-learning/ можно получить 30 дней. Промокод прикреплен снизу.
Приятного чтения!
#freebies
Спасибо, что читаете мой канал об #nodejs. Я стараюсь сделать рецепты короткими, но полезными. Они такие, чтобы читать их на бегу.
К сожалению, книги так не почитаешь. А читать книги необходимо! Лучшие книги по разработке издает издательство O'Reilly (такие с животными на обложке). У них есть замечательный портал learning.oreilly.com. Помимо книг там есть видео и тренировочные сертификации. Отличный контент, который я люблю читать с планшета.
Одна беда – цена 50$/месяц, 500$/год.
У них есть trial 10 дней, но этого мало, чтобы прочитать книгу. По ссылке https://learning.oreilly.com/get-learning/ можно получить 30 дней. Промокод прикреплен снизу.
Приятного чтения!
Как померять время выполнения команды в терминале?
#cli
TL;DR Используйте hyperfine
Стандартный способ померять время исполнения команды посредством time.
Пример:
Если
Пример:
Для оценки cli команд тоже есть benchmark. Называется hyperfine. Он может сравнивать несколько команд, делать прогрев или подготовку.
Пример:
Его удобно использовать в извечном холиваре #nodejs разработчиков: yarn vs npm. Вот так можно сделать сравнение для вашего проекта:
#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'Обзор Node.js v16: AbortController
#nodejs_api
16-ой версия #nodejs даст нам нативный
Ждем появления в коде и на собеседованиях abortable-функций. Уже сейчас SDK cloud-провайдеров (AWS, Azure, GCP) использует полифил. Пример кода:
Для полноценного перехода пока не хватает
#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 signalconst controller = new AbortController();const abortSignal = controller.signal;// pass the abortSignal into the API you want to cancelawait blobClient.download({ abortSignal })// then sometime later, cancel it!controller.abort();Для полноценного перехода пока не хватает
AbortError. Об это есть issue. Надеюсь ее закроют до выхода 16-й LTS.👍1
Почему разработчикам необходимо знать Cloud сервисы?
#cloud
В одном из #nodejs чатов прилетел вопрос
Вот варианты решения задачи Text-To-Speach:
1️⃣Web Speech API, необходим запущенный браузера.
2️⃣Использовать Node.js только для запуска child_process.
3️⃣Vendor hosted, Использовать стороннего сервиса
4️⃣Cloud Native, т.е. использования сервисов предлагаемых облаком
Когда бизнесу важна скорость выхода на рынок, то Cloud Native безусловный фаворит. Поэтому я бы рекомендовал начать с родного облака:
☁️ AWS предлагает Polly
☁️ GCP предлагает @google-cloud/text-to-speech
☁️ Azure предлагает microsoft-cognitiveservices-speech-sdk
#cloud
В одном из #nodejs чатов прилетел вопрос
"Подскажите, нужна либа которая из текста делает озвучку и сохраняет ее. Куда копать?" (c)Вот варианты решения задачи Text-To-Speach:
1️⃣Web Speech API, необходим запущенный браузера.
2️⃣Использовать Node.js только для запуска child_process.
3️⃣Vendor hosted, Использовать стороннего сервиса
4️⃣Cloud Native, т.е. использования сервисов предлагаемых облаком
Когда бизнесу важна скорость выхода на рынок, то Cloud Native безусловный фаворит. Поэтому я бы рекомендовал начать с родного облака:
☁️ AWS предлагает Polly
☁️ GCP предлагает @google-cloud/text-to-speech
☁️ Azure предлагает microsoft-cognitiveservices-speech-sdk
👍1
Вы заметили в вашем Docker Desktop вкладку Dev Environments? Там пока нет ничего кроме интро видео. Мы узнаем детали 27 мая на DockerCon Live 2021.
➡️ Бесплатная регистрация
#conference #docker #freebies
➡️ Бесплатная регистрация
#conference #docker #freebies
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():
#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());};YouTube
Throw Me a Lifebuoy: Debugging Node.js in Production with Diagnostic Reports - Christopher Hiller
Christopher Hiller, IBM
Diagnostic Reports are a recent addition to Node.js core. This feature enables insight into Node.js processes running in production—without needing to attach a debugger—and the results can be interpreted offline. If you've ever had…
Diagnostic Reports are a recent addition to Node.js core. This feature enables insight into Node.js processes running in production—without needing to attach a debugger—and the results can be interpreted offline. If you've ever had…
Подборка node.recipes за апрель 2021
#monthly_list
Рецепты для #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 провайдеров
#monthly_list
Рецепты для #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 провайдеров
Node.js Recipes pinned «Подборка node.recipes за апрель 2021 #monthly_list Рецепты для #nodejs разработчиков: ➡️ Когда можно считать, что вышла новая версия Node.js? ➡️ Как правильно настроить TypeScript в Node.js проекте? ➡️ Как исправить код в node_modules? ➡️ Как протестировать…»
How to Build and Run Node Apps with Docker and Compose
#worth_seeing #docker
Доклад с прошлого DockerCon. Он особенно полезен для начинающих #nodejs разработчиков. Если вы опытный разработчик, то рекомендую посмотреть весь плейлист, откуда взят этот доклад.
#worth_seeing #docker
Доклад с прошлого DockerCon. Он особенно полезен для начинающих #nodejs разработчиков. Если вы опытный разработчик, то рекомендую посмотреть весь плейлист, откуда взят этот доклад.
YouTube
How to Build and Run Node Apps with Docker and Compose
--
Containers are an essential part of today's microservice ecosystem, as they allow developers and operators to maintain standards of reliability and reproducibility in fast-paced deployment scenarios. And while there are best practices that extend across…
Containers are an essential part of today's microservice ecosystem, as they allow developers and operators to maintain standards of reliability and reproducibility in fast-paced deployment scenarios. And while there are best practices that extend across…
Что такое Race Condition на клиенте?
#architecture
В одном из #nodejs чатов задали вопрос: "
Конкретный пример: вы делаете страницу Ethereum Blocks с live updates, получая начальные данные по REST и подпиской на обновления по WS. Клиент или теряет блок, или получить его дважды. Пускай скорость генерации блоков 1 в 13 секунд, а задержки данных между WS и REST 0.5 секунды. Расчет показывает, что есть 4% шанс не корректного поведения.
Варианты решения:
👎 REST с запросами с
👍 WS с созданием подписки на требуемые обновления. В момент создания подписки сервер отдает текущее состояние ресурса. Необходимо предусмотреть переконект с учетом последнего сообщения и множественные подписки.
🔥 Server Sent Events создан именно для таких случаев. Имеет переподключение из коробки, а подписка определяется по URL. Требует HTTP2, чтобы избежать ограничения браузера в 4 соединения. Имеет разную реализацию в браузерах, что решается с помощью event-source-polyfill. Имеет поддержку в Nest.js, см. server-sent-events
#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
👍1
Как использовать cron в Node.js?
#kubernetes #service #nestjs
Есть много бизнес задач делать что-то по расписанию. Для этого используют утилиту cron, а расписание описывают crontab выражением. Пример: задача – отправлять отчет на емейл каждый день в 3 часа ночи, график –
Реализовывать 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, а мастер реплика определяется через
➡️Cron на уровне кода, но вынесен в отдельный Deployment с одной репликой.
➡️Если же задачи ресурсоемкие, то правильно использовать CronJob.
Выбирайте решение на правильном уровне!
#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.
Выбирайте решение на правильном уровне!
Как запускать Node.js с доп. аргументами?
#nodejs_api #devops
При запуске #nodejs бывает необходимо передать дополнительные аргументы. Примеры:
➡️
➡️
➡️
Полный перечень аргументов и их использование в документации CLI.
Стоит знать об переменной окружения
#nodejs_api #devops
При запуске #nodejs бывает необходимо передать дополнительные аргументы. Примеры:
➡️
node --no-warnings app.js➡️
node --noscript='MyApp' app.js➡️
node --require dotenv/config app.jsПолный перечень аргументов и их использование в документации CLI.
Стоит знать об переменной окружения
NODE_OPTIONS. Любые значения из нее Node.js добавляет в перечень аргументов. На одном из проектов мы включаем DataDog вот таким образом: NODE_OPTIONS='--require dd-trace/init'Как документировать логику?
#architecture #service
Мало кто из #nodejs разработчиков пользуется UML диаграммами. А зря! Это очень наглядно и улучшает поддержку. Благодаря синтаксису PlantUML диаграммы можно не рисовать, а писать. Вот пример кода с картинки:
Данный код описывает самую частую диаграмму – Sequence Diagram (последовательности). Есть и другие. За примерами прошу на сайт PlantUML.
Диаграммы можно описывать как в отдельных
Для рендеринга можно использовать:
➡️ Расширение для JetBrains PlantUML integration
➡️ Расширение для Visual Code PlantUML
➡️ Онлайн версия
В комментариях напомнили альтернативу на JS – mermaid.
#architecture #service
Мало кто из #nodejs разработчиков пользуется UML диаграммами. А зря! Это очень наглядно и улучшает поддержку. Благодаря синтаксису PlantUML диаграммы можно не рисовать, а писать. Вот пример кода с картинки:
@startumlAlice -> Bob: Authentication RequestBob --> Alice: Authentication ResponseAlice -> Bob: Another authentication RequestAlice <-- Bob: another authentication Response@endumlДанный код описывает самую частую диаграмму – Sequence Diagram (последовательности). Есть и другие. За примерами прошу на сайт PlantUML.
Диаграммы можно описывать как в отдельных
.puml файлах, так и вставлять в JSDoc. Рекомендую хранить в git репозитории не только исходники, но и сгенерированные диаграммы. Это упростить изучение проекта.Для рендеринга можно использовать:
➡️ Расширение для JetBrains PlantUML integration
➡️ Расширение для Visual Code PlantUML
➡️ Онлайн версия
В комментариях напомнили альтернативу на JS – mermaid.
👍1
Voice Chat #0, сегодня 21:00-21:30 по Киеву
#announcement #voice_chat
В качестве эксперимента попробуем Q&A в Voice Chat формате.
Отобранные вопросы из #nodejs чатов:
❓
❓
❓
Присоединяйтесь послушать или задать свой вопрос.
#announcement #voice_chat
В качестве эксперимента попробуем Q&A в Voice Chat формате.
Отобранные вопросы из #nodejs чатов:
❓
ребята, какие есть способы логирования кроме winston, cosole.log(), res.send() ?? – @nodejs_ru❓
Что еще можно посмотреть или лучше даже почитать(имею в виду не книги, а может блоги какие-то хорошие) по ноде – @nodeua❓
Отвечать на вопросы на форумах - хорошая идея для подтягивания теории или практики? – @nodejs_ruПрисоединяйтесь послушать или задать свой вопрос.
Что такое Floating Promise и почему это опасно?
#code_pattern #nodejs_api
TL;DR Используйте
Floating (не отловленный, плавающий) promise как правило указывает на ошибку в коде. Если внутри Floating promise произойдет ошибка, то #nodejs процесс аварийно завершит работу. Для отлавливания таких событий существует
Отлавливать Floating promise лучше не в run time, а с помощью линтера. Для этого существуют правила:
➡️ в eslint
➡️ в typenoscript-eslint
➡️ тут мог бы быть tslint, но его уже нельзя использовать.
В определенных случаях, бизнес логика не требует ожидания завершения промиса. Тогда необходимо использовать комментарий в коде, указывающий линтеру игнорировать ошибку. Вот пример, когда REST не дожидается отправки емейла новому пользователю.
#code_pattern #nodejs_api
TL;DR Используйте
no-floating-promises и unhandledRejectionFloating (не отловленный, плавающий) promise как правило указывает на ошибку в коде. Если внутри Floating promise произойдет ошибка, то #nodejs процесс аварийно завершит работу. Для отлавливания таких событий существует
unhandledRejection. Пример из документации:process.on('unhandledRejection', (reason, promise) => { console.log('Unhandled Rejection at:', promise, 'reason:', reason);});Отлавливать Floating promise лучше не в run time, а с помощью линтера. Для этого существуют правила:
➡️ в eslint
➡️ в typenoscript-eslint
➡️ тут мог бы быть tslint, но его уже нельзя использовать.
В определенных случаях, бизнес логика не требует ожидания завершения промиса. Тогда необходимо использовать комментарий в коде, указывающий линтеру игнорировать ошибку. Вот пример, когда REST не дожидается отправки емейла новому пользователю.
import { usersRepository } from '~/repositories';import { sendConfirmationEmail } from '~/services/notifications';import logger from '~/logger';// pseudo route handlerexport async function registerUser(data: newUserDTO): { const user = await usersRepository.create(data); // eslint-disable-next-line @typenoscript-eslint/no-floating-promises sendConfirmationEmail(user) .catch(err => logger({err, user}, 'Error during sending confirmation email'); return user;}42 WebStorm Tips and Tricks
#worth_seeing
Сегодняшнее видео не доклад с конференции, а с вебинара. Оно полностью посвящено тому, как использовать WebStorm на полную мощность.
Вот hotkey к функционалу, который реально ускоряет разработку:
⌥T – refactor for selected text
⌥⌘T – surround with
⌥⌘L – reformat Code
⇧⏎ – smart new line
⌥⌘⏎ – new line before current one
⌥↑ or ⌥↓ – change selection
⇧⌥↑ or ⇧⌥↓ – move lines
Полезные ссылки по WebStorm:
➡️ ShortcutMapper
➡️ WebStorm Guide
➡️ Key Promoter X
PS На холиварный вопрос "WebStorm или VisualStudioCode?" я отвечаю "не или, а и". Для DevOps задач – VS, для разработки – WebStorm.
#worth_seeing
Сегодняшнее видео не доклад с конференции, а с вебинара. Оно полностью посвящено тому, как использовать WebStorm на полную мощность.
Вот hotkey к функционалу, который реально ускоряет разработку:
⌥T – refactor for selected text
⌥⌘T – surround with
⌥⌘L – reformat Code
⇧⏎ – smart new line
⌥⌘⏎ – new line before current one
⌥↑ or ⌥↓ – change selection
⇧⌥↑ or ⇧⌥↓ – move lines
Полезные ссылки по WebStorm:
➡️ ShortcutMapper
➡️ WebStorm Guide
➡️ Key Promoter X
PS На холиварный вопрос "WebStorm или VisualStudioCode?" я отвечаю "не или, а и". Для DevOps задач – VS, для разработки – WebStorm.
YouTube
42 WebStorm Tips and Tricks
#WebStorm brings a bunch of IDE features to professional #JavaScript and web development. Want to "level up" and learn #productivity boosters? This hands-on, fast-paced workshop covers tips across all the major product features.
Many of these tips come…
Many of these tips come…
Dev.Pro JS Conference
#conference #raffle
22-23 мая будет онлайн-конференция, где я буду выступать с докладом
Содержание доклада: ответы на вопросы, о которых нужно задумываться на разных этапах развития #nodejs проекта.
Из докладов для себя я выделил:
👀 Minko Genchev,
👀 Hannes Obweger,
доклад от того, кто реально понимает на личном опыте эту сложную тему.
Так же будет два воркшопа:
⚙️ Тимур Шемсединов
⚙️ Елена Жукова
🎤 Формат: онлайн с использование spatial.chat, лучшим инструментом для онлайн нетворкинга.
➡️ Регистрация: jsconf.dev.pro
💵 Цена: 450грн, промокод на 10% – NodeRecipes
До встречи на конференции!
#conference #raffle
22-23 мая будет онлайн-конференция, где я буду выступать с докладом
The Road to production.Содержание доклада: ответы на вопросы, о которых нужно задумываться на разных этапах развития #nodejs проекта.
Из докладов для себя я выделил:
👀 Minko Genchev,
Tools for Fast Angular Applications, даже если вы не пишете на Angular этот докладчик стоит внимания.👀 Hannes Obweger,
Frontend Engineering at a Scale, доклад от того, кто реально понимает на личном опыте эту сложную тему.
Так же будет два воркшопа:
⚙️ Тимур Шемсединов
Node.js for Enterprise, часть контента уже была в рамках FWdays.⚙️ Елена Жукова
Stunning Performance Workshop, об оптимизации загрузки фронтенда.🎤 Формат: онлайн с использование spatial.chat, лучшим инструментом для онлайн нетворкинга.
➡️ Регистрация: jsconf.dev.pro
💵 Цена: 450грн, промокод на 10% – NodeRecipes
До встречи на конференции!
Среди 80 участников розыгрыша удача улыбнулась: @Vlod_R, @habiiev, @ShGKme!
🎉🎉🎉 Поздравляем!
В ближайшее время с вами свяжется менеджер конференции и поможет оформить ваши билеты.
🎉🎉🎉 Поздравляем!
В ближайшее время с вами свяжется менеджер конференции и поможет оформить ваши билеты.