В этой статье я попробую заглянуть за пределы возможностей языка JavaScript и оценить, как производительность может существенно различаться при написании выразительного, декларативного и лаконичного кода по сравнению с оптимизированным. На примере функции, определяющей, является ли строка палиндромом, я покажу несколько вариантов решения задачи с замерами времени на исполнение. Затем напишу модуль на C, который буду вызывать наряду с методами на JavaScript для замера скорости. Проведу низкоуровневые оптимизации. Все это стало возможно благодаря развитию ИИ.
Ниже представлен код, который удовлетворит требованиям большинства интервью. К стыду своему, я забыл, как писать регулярные выражения, чтобы удалить все, кроме букв и чисел. ссылка на репозиторий.
![](http://habrastorage.org/getpro/habr/hub/820/f03/364/820f03364cccdb926fd93cfe2438f962.png)
NestJS *
фреймворк для создания приложений на Node.js
Новости
Как сделать приложение на NestJS, которое можно будет поддерживать спустя годы
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/570/cbc/c1a/570cbcc1a65a31ea5487014ac32f6ef5.png)
В данной статье мы разберём, как создать и расширять приложение на NestJS, которое будет адекватно поддерживаться спустя годы и не превратится в нечто, с чем не захочется работать разработчикам.
Мой опыт создания frontend и backend приложений для моего стартапа
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/d6d/bc9/cc5/d6dbc9cc53557e4a6a210d81d9c035bf.jpeg)
В прошлой части я рассказывал как появилась идея стартапа, как найти потребности пользователей, как спроектировать продуктовые требования. Также я рассказал как сделал проектирование и разработку дизайна.
В этой части я хочу рассказать как проектировал backend & frontend приложения.
Напомню что мы разрабатываем приложения для мерчанта, которое интегрируется в административную панель через iframe. Наше приложение должно иметь доступ к товарам, для того чтобы мерчант мог настроить маркетинговые кампании. Также приложение должно автоматически совершать публикации в Instagram.
PrimeNG + NestJS + Yandex = речевая аналитика
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/e3b/1e3/66e/e3b1e366e4cb7bef8457d8fa9c476699.png)
Разработали речевую аналитику для контакт-центра. Распознавание речи через сервис Yandex Speechkit, а анализ полученного текста уже в контуре, на нашем решении. По ходу разработки встречались интересные моменты, которые постараюсь описать.
Истории
Коллекция утилит NestJS-mod для унификации приложений и модулей на NestJS
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/6f5/82a/fbe/6f582afbe8e664aba6ee08ad5cb01cba.png)
Коллекция утилит NestJS-mod предназначена для унификации приложений и модулей NestJS, а также представляет новые логические возможности разделения обязанностей между модулями (System, Core, Feature, Integration, Infrastructure).
Как мы Kafka с NestJS microservices подружить пытались
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/256/f34/ccf/256f34ccf5faf4aaa445aa521973d54b.png)
Привет, меня зовут Валентин, я NodeJS-разработчик в Сравни. Моя команда делает Profile Service — внутренний продукт, который отвечает за быстрое получение и запись личных данных пользователей для экосистемы Сравни. Мы взаимодействуем с 20+ продуктовыми командами, которые дают нагрузку на сервис порядка 200-300 RPS; порядок обрабатываемых записей в БД – десятки миллионов.
В какой-то момент мы решили внедрить Kafka – де-факто стандарт транспорта, работающий в миллионах проектов. Что может пойти не так? Оказалось – вообще всё что угодно.
В этой статье я расскажу, с какими неочевидными проблемами мы столкнулись при переходе на Kafka у нас в продукте, как мы чинили баги в NestJS Microservices и какие выводы сделали (спойлер: Kafka – не всегда хорошее решение).
Приступим!
Внедрение Guards NestJS. Аутентификация и авторизация на основе ролей
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/f8a/81b/dc3/f8a81bdc30c36da6f43ce2d9d48997e6.jpg)
На данный момент об инструменте guards защиты данных не так много публикаций как он того заслуживает. В основном это техническая документация от разработчика https://docs.nestjs.com/guards . Для восполнения указанного пробела рассмотрим наш кейс по внедрению guards для защиты данных от пользователя, который не имеет достаточно прав на их получение и/или изменение. Описание процедуры внедрения guards сопровождается примерами кода.
Во избежание разночтения приведем определения понятий аутентификация и авторизации, которые будут использоваться ниже.
Итак, аутентификация - это процесс проверки личности пользователя или устройства, позволяющий получить авторизованный доступ к конфиденциальной информации или системам. То есть проверка, что вы действительно тот человек, за которого себя выдаёте.
Авторизация - это процесс определения наличия у пользователя или устройства необходимых прав для доступа к определённому ресурсу, в нашем случае к запросам (Mutation, Query...).
Функции guards
Guards определяют, будет ли запрос обрабатываться маршрутизатором или нет, в зависимости от определённых условий (в нашем случае ролей). Это часто называют авторизацией. Авторизация обычно обрабатывается промежуточным программным обеспечением в традиционных приложениях Express. Но промежуточное ПО по своей природе ограничено. Оно не знает, какой обработчик будет выполнен после вызова next() функции. С другой стороны, guards имеют доступ к ExecutionContext экземпляру и, таким образом, точно знают, что будет выполняться дальше. Они спроектированы так, чтобы вставить логику обработки точно в нужную точку цикла запроса/ответа и делать это декларативно.
create-react-app, но для Go?
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/642/7c2/5c6/6427c25c60d8802ef4371ac4106261f5.png)
Спустя какое-то время работы с front-end'ом я решил перейти в страшный лес, каким его всегда представляли всякие мемы - back-end. Конечно же я выбрал node.js и начал с express.js. Для меня было необычно, что не было инструмента (или же я плохо искал) для того, чтобы создавать корневую систему директорий самому. Я начал класть все в корень проекта и в этом и не было проблемы до момента, когда надо было расширять проект и начиналась путаница где лежит сервер, а где конфигурации для сервера, БД и т.д.
В силу новизны своих знаний я думал, что вся эта штука с src, config и public нужна конкретно для экосистемы отдельных технологий. В силу новизны своих знаний я думал. Я начал сам создавать директории, потом перешел на Nest.js и забыл про это. И вот я начал учить Golang, а там к тому же еще другая модель структуры проекта.
Первое пытался найти какой-то сборщик проекта для Go, но не мог. Потому я нашел репозиторий с шаблоном, и каждый раз, когда я начинал проект - я заходил и смотрел как там правильно делать.
NestJS для разрастающейся разработки: зачем так сложно и почему всё-таки да
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/70b/30e/a31/70b30ea31570c50c442fdad89e6ecbd5.png)
Привет, Хабр. Меня зовут Денис Былинин, я архитектор в компании Сравни.
Сегодня хочу рассказать, как мы пришли к использованию NestJS и какие сделали выводы после года работы с ним. Чтобы не уходить в абстракции, которые легко гуглятся, я сосредоточусь на том, как использование этого фреймворка в реальности влияет на разработку, а также на его плюсах и минусах, с которыми мы лично столкнулись в работе.
Статья будет полезна руководителям разработки, системным архитекторам, тимлидам и всем, кто так или иначе заинтересован во внедрении новых фреймворков и инструментов в компании.
WebSocket ориентированое Api на Nest.js
В этой статье я расскажу как создал модуль под Nest.js позволяющий писать классическое RESTFull API со swagger'ом но клиент будет полностью на WebSocket'ах, звучит странно не так ли? Но зато очень быстро и удобно по итогу)
Идея состоит в том, что вы пишите классическое документированное апи, со всеми типами и плюшками.
GridComponent. Часть II. Котики, NestJS и чуть-чуть о Postman
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/4b3/b96/42e/4b3b9642e8e2dbdea23d6721ddd9b9d4.png)
Доброго дня, хабровчане!
Как и обещал, в продолжение своего пет-проекта по созданию грид-компонента опишу здесь создание backend части.
PrimeNG + NestJS = CRM — часть 1
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/ab6/bc4/2c7/ab6bc42c71c6d181878a68298e2c8f50.png)
Решили in-house разработать CRM систему. По ходу разработки встречались интересные моменты, которые постараюсь описать в нескольких статьях. В статьях постараюсь избежать банальностей типа: скачал, распаковал, запустил, и вот глядите, swagger из коробки. Таких статей, как и видео на Ютубах, уже очень много. Постараюсь поделиться просто интересными деталями, которые встречались по ходу разработки. Забегу вперед — систему настроили и запустили.
Ближайшие события
![](https://habrastorage.org/getpro/habr/upload_files/d8c/8d5/c5f/d8c8d5c5f2fe3f77b4a21c5e986fceb1.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/a4c/1f6/140/a4c1f6140d1b2bd280246cf039746752.png)
![](https://habrastorage.org/getpro/habr/upload_files/ce8/1f8/4fe/ce81f84fe4c22e2e3ef85388797db6ac.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/fd0/255/4d3/fd02554d346912bf8fc4bc81f9406174.png)
![](https://habrastorage.org/getpro/habr/upload_files/8ca/d72/5e6/8cad725e62dafcc18e20f6e3dd3f2ccd.png)
Слак бот на минималках ч2
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/a8e/788/f68/a8e788f68ff1588bfb40742d85990557.jpeg)
Привет, в прошлой статье мы пытались заинтегрировать слак приложение с хантфлоу, сейчас попробуем написать самостоятельное слак приложение со своей бд.
Руководство по NestJS. Часть 2
![](https://habrastorage.org/webt/ks/gf/b-/ksgfb-bhpeowyr1mmvuelbmib6m.jpeg)
Привет, друзья!
Данная серия статей представляет собой мои заметки о NestJS — фреймворке для разработки эффективных и масштабируемых серверных приложений на Node.js. NestJS использует прогрессивный (что означает текущую версию ECMAScript) JavaScript с полной поддержкой TypeScript (использование TypeScript является опциональным) и сочетает в себе элементы объектно-ориентированного, функционального и реактивного функционального программирования.
Под капотом Nest по умолчанию использует Express, но позволяет переключиться Fastify.
Первая статья представляет собой обзор основных возможностей, предоставляемых NestJS, во второй рассматриваются основы работы с этим фреймворком, в третьей — техники и рецепты по интеграции NestJS с некоторыми популярными библиотеками, используемыми при разработке приложений на Node.js, наконец, четвертая статья представляет собой туториал по разработке относительно полноценного React/Nest/TypeScript-приложения.
При рассказе о Nest я буду придерживаться структуры и содержания официальной документации.
Это вторая часть руководства.
Разрабатываем REST API с помощью TypeScript, NestJS, Prisma, AdminJS и Swagger
![](https://habrastorage.org/webt/ma/po/lv/mapolvqq4uunxfqoaviv3g9km9y.jpeg)
Привет, друзья!
В данном туториале мы разработаем простой сервер на NestJS, взаимодействующий с SQLite с помощью Prisma, с административной панелью, автоматически генерируемой с помощью AdminJS, и описанием интерфейса, автоматически генерируемым с помощью Swagger. Все это будет приготовлено под соусом TypeScript.
Если вам это интересно, прошу под кат.
Руководство по NestJS. Часть 1
![](https://habrastorage.org/webt/ks/gf/b-/ksgfb-bhpeowyr1mmvuelbmib6m.jpeg)
Привет, друзья!
В этой серии из 3 статей я расскажу вам о Nest (NestJS) — фреймворке для разработки эффективных и масштабируемых серверных приложений на Node.js. Данный фреймворк использует прогрессивный (что означает текущую версию ECMAScript) JavaScript с полной поддержкой TypeScript (использование TypeScript является опциональным) и сочетает в себе элементы объектно-ориентированного, функционального и реактивного функционального программирования.
Под капотом Nest использует Express (по умолчанию), но также позволяет использовать Fastify.
В первой статье рассматриваются основы работы с Nest, во второй — некоторые продвинутые возможности, предоставляемые этим фреймворком, в третьей — приводится пример разработки простого React/Nest/TypeScript-приложения.
При рассказе о Nest я буду в основном придерживаться структуры и содержания официальной документации.
Это первая часть руководства.
Prisma — как подключить в Nest-проекте
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/af2/064/579/af2064579210586910aee0b40e31112d.jpg)
## Prisma - установка в проект
Установка поддержки Prisma в NestJS-проекте выполняется очень просто - при помощи двух команд.
Первая - устанавливает клиентскую часть Prisma:
$ npm i @prisma/client
... вторая команда - устанавливает cli-часть Prisma:
$ npm i -D prisma
После этого - нужно запустить команду для инициализации Prisma в текущем проекте:
$ npx prisma init
В результате в корне проекта будет создана папка prisma
, внутри которой будет находиться файл schema.prisma
для настройки подключения Prisma к базе данных (и не только).
Содержимое файла schema.prisma
очень простое:
NestJS + GraphQL + Lambda
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/af8/352/331/af8352331883aeb03432057e71b4601e.jpg)
Цель данной статьи - создать GraphQL приложение, построенное на фреймворке NestJS. А также загрузить его в Лямбда-функцию при помощи Terraform. Надеюсь данный пример поможет многим сэкономить много времени.