Вопреки распространенному мнению, облако Voximplant не использует Node.js, чтобы выполнять JavaScript код клиентов параллельно с голосовыми и видеозвонками. Каждый наш сервер одновременно управляет сотнями звонков: переключение голосовых и видеопотоков между звонками, запись, распознавание голоса, синтез, HTTP-запросы к внешним серверам, — вся вот эта история. А Node.js создана, чтобы работы в одиночку. Несколько сотен изолированных инстансов — это не про нее. Передерутся за память, ресурсы и все закончится очень печально. Поэтому у нас сильно изолированная и ограниченная по ресурсам песочница, которая не дает клиентскому JavaScript-коду в одной маленькой сессии нарушать работу целых серверов. Asterisk у нас тоже не используется по похожим причинам.
До недавнего времени мы поддерживали синтаксис ES5. Типовой сценарий работы с коммуникациями — это несколько сотен, максимум, тысяч строк кода. Сложные штуки клиенты все равно выносят на собственный backend, а если нужен современный синтаксис, всегда можно воспользоваться транспайлером и автоматически отгрузить собранный JavaScript с помощью Continuous Integration.
Но 2017 год обязывает, да и Web-редактор и отладчик клиенты любят и используют для быстрого создания нужных решений. Поэтому мы запилили поддержку ES2017 (не с нуля, естественно, а готовыми компонентами) и переделали обучающие материалы на современный лад. Под катом я хочу показать, насколько короче и понятнее становится код, если пользоваться современной нотацией JavaScript. Разница впечатляет.
async и await
Так как наше API уже довольно давно возвращает промисы, где это возможно, то цепочка then с передачей параметров превращается в хорошо читаемый линейный код:
стрелочные функции и destructuring
Просто сокращают код. Особенно destructuring, который убирает временные идентификаторы и оставляет только то, что нам нужно:
let и const
Хорошо когда есть линтер, автобилд, автотест и автодеплой. Но в реальности часто нужно быстро зайти в скрипт и что-нибудь поменять из веб-редактора. Новые let и const позволяют писать код, который сам защитит разработчика от «детских» ошибок:
строковые литералы с интерполяцией
Делают код читаемым и защищают от множества детских ошибок при отсутствии тулчейна. Да, мы знаем, что разрабатывать на JS без тулчейна — это моветон. Но когда у сервиса тысячи клиентов и у многих основной бизнес никак не связан с программированием, хочется их защитить уже на этапе примеров и первых экспериментов. Одна из “фишек” Voximplant в том, что компания может взять своего штатного веб-разработчика, можно не очень крутого, и он за несколько часов без проблем соберет из “кубиков лего” нужную телефонную автоматику. Очень хочется, чтобы кубики при этом не пытались взорваться у него в руках:
of-циклы, классы, хелперы и другие мелочи
Большинство сценариев для нашей платформы довольно “легковесны”: запросы к backend, роутинг звонка, куда надо, и отображение в CRM, чего не надо, автоматические звонки с подтверждениями покупки или доставки, выбор нужного контрагента по ряду условий и тому подобное. Но всегда велик обойтись без собственного backend вообще и заставить наше облако делать всю работу не только с коммуникациями, но и с бизнес-логикой этих коммуникаций. Мы в целом не против, до тех пор пока сценарий укладывается в границы песочницы и не пытается откушать слишком много ресурсов сервера. “Родная” поддержка всего синтаксического сахара ES2017 позволяет быстро добавлять логику в сценарии без необходимости настраивать у себя компилятор из какого-нибудь TypeScript, тесты и деплой. Потом это все, конечно, не повредит — но возможность сделать сложную штуку здесь и сейчас в онлайн-редакторе с минимумом строк кода очень помогает.
Автор: Grigory Petrov