- PVSM.RU - https://www.pvsm.ru -

Наш облачный JS теперь ES2017, и это сокращает код в разы

Наш облачный JS теперь ES2017, и это сокращает код в разы - 1

Вопреки распространенному мнению, облако Voximplant не использует Node.js, чтобы выполнять JavaScript код клиентов параллельно с голосовыми и видеозвонками. Каждый наш сервер одновременно управляет сотнями звонков: переключение голосовых и видеопотоков между звонками, запись, распознавание голоса, синтез, HTTP-запросы к внешним серверам, — вся вот эта история. А Node.js создана, чтобы работы в одиночку. Несколько сотен изолированных инстансов — это не про нее. Передерутся за память, ресурсы и все закончится очень печально. Поэтому у нас сильно изолированная [1] и ограниченная по ресурсам песочница, которая не дает клиентскому JavaScript-коду в одной маленькой сессии нарушать работу целых серверов. Asterisk у нас тоже не используется по похожим причинам.

До недавнего времени мы поддерживали синтаксис ES5. Типовой сценарий работы с коммуникациями — это несколько сотен, максимум, тысяч строк кода. Сложные штуки клиенты все равно выносят на собственный backend, а если нужен современный синтаксис, всегда можно воспользоваться транспайлером и автоматически отгрузить собранный JavaScript с помощью Continuous Integration [2].

Но 2017 год обязывает, да и Web-редактор и отладчик клиенты любят и используют для быстрого создания нужных решений. Поэтому мы запилили поддержку ES2017 (не с нуля, естественно, а готовыми компонентами) и переделали обучающие материалы на современный лад. Под катом я хочу показать, насколько короче и понятнее становится код, если пользоваться современной нотацией JavaScript. Разница впечатляет.

async и await

Так как наше API уже довольно давно возвращает промисы, где это возможно, то цепочка then с передачей параметров превращается в хорошо читаемый линейный код:

стрелочные функции и destructuring

Просто сокращают код. Особенно destructuring, который убирает временные идентификаторы и оставляет только то, что нам нужно:

let и const

Хорошо когда есть линтер, автобилд, автотест и автодеплой. Но в реальности часто нужно быстро зайти в скрипт и что-нибудь поменять из веб-редактора. Новые let и const позволяют писать код, который сам защитит разработчика от «детских» ошибок:

строковые литералы с интерполяцией

Делают код читаемым и защищают от множества детских ошибок при отсутствии тулчейна. Да, мы знаем, что разрабатывать на JS без тулчейна — это моветон. Но когда у сервиса тысячи клиентов и у многих основной бизнес никак не связан с программированием, хочется их защитить уже на этапе примеров и первых экспериментов. Одна из “фишек” Voximplant в том, что компания может взять своего штатного веб-разработчика, можно не очень крутого, и он за несколько часов без проблем соберет из “кубиков лего” нужную телефонную автоматику. Очень хочется, чтобы кубики при этом не пытались взорваться у него в руках:

of-циклы, классы, хелперы и другие мелочи

Большинство сценариев для нашей платформы довольно “легковесны”: запросы к backend, роутинг звонка, куда надо, и отображение в CRM, чего не надо, автоматические звонки с подтверждениями покупки или доставки, выбор нужного контрагента по ряду условий и тому подобное. Но всегда велик обойтись без собственного backend вообще и заставить наше облако делать всю работу не только с коммуникациями, но и с бизнес-логикой этих коммуникаций. Мы в целом не против, до тех пор пока сценарий укладывается в границы песочницы и не пытается откушать слишком много ресурсов сервера. “Родная” поддержка всего синтаксического сахара ES2017 позволяет быстро добавлять логику в сценарии без необходимости настраивать у себя компилятор из какого-нибудь TypeScript, тесты и деплой. Потом это все, конечно, не повредит — но возможность сделать сложную штуку здесь и сейчас в онлайн-редакторе с минимумом строк кода очень помогает.

Автор: Grigory Petrov

Источник [3]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/265796

Ссылки в тексте:

[1] сильно изолированная: http://voximplant.com/docs/references/appengine/#sandbox

[2] Continuous Integration: https://habrahabr.ru/company/Voximplant/blog/269473/

[3] Источник: https://habrahabr.ru/post/340188/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best