На прошлой неделе dotJS приветствовал более 1500 энтузиастов JavaScript в Париже — enpit отправил вместе с ними Яниса Краземанна и меня. Толпа с нетерпением ждала, когда некоторые из самых влиятельных людей в отрасли расскажут о том, что мы все любим: JavaScript. Нас ждал целый день JS-добра, и команда dotJS проделала фантастическую работу, организовав день с высококачественными докладами на разные темы — от систем типов до Minecraft, от адского фреймворка до танцующих роботов. .

JavaScript в поле

Какие интересные вещи некоторые из нас делают с JavaScript? Как мы его используем и какие технологии нас интересуют?

День начался с того, что Саша Грейф (@SachaGreif) представил результаты своего исследования Состояние JavaScript за 2018 год. Полные результаты будут опубликованы в ближайшее время, но некоторые выводы из беглого обзора некоторых из самых популярных технологий JS заключаются в следующем:

– React набирает обороты благодаря большому числу пользователей и высокой удовлетворенности разработчиков,
– разработчики часто используют Angular, но не совсем довольны своим опытом,
– Vue находится на отличном пути с большим количеством интерес со стороны разработчиков, которые в настоящее время еще не используют его, но надеются сделать это в будущем
— GraphQL стал более популярным за последние два года, и хотя разработчики определенно заинтересованы, он еще не получил широкого распространения

Помимо крупных конкурентов, таких как Angular и React, кажется, что новые библиотеки и фреймворки появляются каждый день. Их изобилие стало настолько нелепым, что превратилось в постоянную шутку на сцене. Так как же на самом деле выбрать JavaScript-фреймворк? Можно много спорить о количестве звезд фреймворка на GitHub, доступных плагинах, документации, его плюсах и минусах в разном, и все это нормально. Но, разговаривая с парой людей из разных лагерей фреймворков, Джон Папа (@john_papa) обнаружил общую тему в их объяснении того, почему им нравится определенный фреймворк: Это чувствует себя хорошо. Джон отметил, что наша продуктивность и удовольствие от использования фреймворка субъективны для нас, и мы не должны чувствовать себя неуверенно по поводу нашего выбора фреймворка, когда он кажется нам правильным.

Этот вопрос о ощущении может быть очень применим к другой технологии (в данном случае не к фреймворку), которая становится все более и более распространенной в сообществе JS.

Не мой тип

Одной из технологий, которая, согласно опросу State of JS, демонстрирует рост числа разработчиков, использующих ее, является TypeScript.

О нет! Другая технология! Зачем мне это нужно?!

В пользу использования TypeScript убедительно выступили два отдельных доклада: Лорен Тан, которая подошла к теме, обосновав теоретическую мотивацию использования систем типов в целом, и сам изобретатель TypeScript, Андерс Хейлсберг. Лорен (@sugarpirate_) разумно сформулировала тему: ограничивая область значений в коде, вы ограничиваете пространство для неожиданного поведения. Конечно, помогает то, что системы типов соответствуют алгебраическим моделям и теории доказательств, которые предоставляют решения для анализа таких систем. В некотором смысле, аннотации типов являются утверждениями, а код — доказательством, что позволяет алгоритмам проверять эти утверждения. Информация о нашем коде, которую собирают эти алгоритмы, может помочь вам и вашей IDE выявить множество ошибок на раннем этапе и сократить количество возможных сбоев вашей программы.

В среде JS есть две известные реализации статической проверки типов, одна из них — TypeScript. Андерс Хейлсберг (@aheijlsberg), специалист по Turbo Pascal и C#, создал TypeScript в Microsoft и, кажется, тесно сотрудничает с командой Visual Studio Code над интеграцией поддержки TypeScript в редактор. Он продемонстрировал кучу вещей, которые компилятор TypeScript может сделать для нас — даже если мы даже не пишем TypeScript! Две основные особенности, которые могут сделать TypeScript привлекательным даже для противников строго типизированных языков:

  1. Сильный акцент на выводе типов, чтобы нам не приходилось быть слишком многословными с нашими аннотациями типов, и
  2. структурная типизация, которая, по сути, означает, что компилятор будет с радостью отбрасывать объекты, которые номинально относятся к разным типам, но структурно совместимы — такая гибкость, в конце концов, является причиной того, что нам так нравится писать на JavaScript, не так ли?

Технологии завтрашнего дня?

TypeScript удобен и все такое, но еще лучше быстрые веб-сайты! И технология, которая обещает сделать Интернет быстрее, — это HTTP/2. Но, к большому разочарованию Тары З. Маниксич (@tzmanics), разработчики, похоже, не оценили этот новый стандарт. Тара попыталась развеять наши опасения, объяснив, насколько созрели реализации HTTP/2 с момента его первоначальной стандартизации… и в каких аспектах они остались прежними.

Может быть, мы, разработчики программного обеспечения, просто не являемся достаточно типами серверных администраторов, чтобы разобраться в этом. Нам нужны точные функции языка программирования, такие как await верхнего уровня. Умеренно большой знак вопроса с момента введения async/await в JavaScript заключался в том, как эта функция может когда-либо хорошо работать с модульной системой. К счастью для нас, Майлз Боринс (@MylesBorins) занимается этим делом и участвует в стандартизации await верхнего уровня TC39. Он рассказал о статусе предложения и объяснил различную семантику, которая возможна для разрешения зависимостей, связанных с асинхронными модулями.

Это мелочи

Обычные разговорные сессии разбавлялись слотами для молниеносных выступлений. И хотя я не хочу делать эту статью еще длиннее, я должен упомянуть высококачественные доклады с участием:

  • Jeremias Menichelli (@jeremenichelli) об асинхронной загрузке веб-шрифтов,
  • Тим Пьетруски (@TimPietrusky) об использовании WebUSB для связи с Arduino,
  • Рой Деркс (@gethackteam) о недостатках шаблонного кода,
  • Сэм Рэй (@_2xAA) об улучшении производительности рендеринга с использованием закадрового холста,
  • Адам Уикс (@AdamWeeks) об отладке кода JavaScript,
  • Маэль Нисон (@arcanis) о Yarn и расположении модулей,
  • Кашьяп Кондамуди (@kgrz) о составлении обещаний,
  • Теджас Кумар (@_TejasKumar) о WebAssembly,
  • Оливье Ловерде (@loverdeolivier) о паттерне CQRS и, наконец,
  • Joost Lubach (@joostlubach) с невероятно занимательной визуализацией асинхронного выполнения программы.

Так что низкий поклон этим парням. И пока мы на этом: за это замечательное мероприятие мы должны поблагодарить замечательную команду, стоящую за ним, в том числе Сильвена Циммера (@sylvinus), Фердинанда Боаса (@ferdinandboas), Дороти Хачес (@doh1313) и Винсента Циммера (@vinczimmer) , и, конечно же, гламурный ведущий Кристоф Портнев (@porteneuve).

JavaScript везде

По словам Феликса Рисеберга (@felixrieseberg), JavaScript на десктопе имеет плохую репутацию — и он прав. Продолжает выпускаться огромное количество приложений Electron, одно из которых медлительнее и занимает больше памяти, чем предыдущее. Но так не должно быть! Феликс дал несколько отличных советов и рекомендаций о том, как мы можем сделать наш десктопный JavaScript-код более производительным. Предостережения, на которые он указал, заключались в том, чтобы

  • следите за модулями: подумайте, что должна загрузить среда выполнения, прежде чем отобразится пользовательский интерфейс. Вам действительно нужен этот модуль npm?
  • учитывайте повторную визуализацию. Когда часть состояния вашего пользовательского интерфейса изменяется, убедитесь, что другие компоненты не перерисовываются без необходимости.
  • используйте методы жизненного цикла. Используйте методы жизненного цикла компонента в своих интересах, правильно регистрируя и, что еще важнее,
    отменяя регистрацию обратных вызовов.

Если вы все сделаете правильно, ваши пользователи даже не заметят, что приложение использует JavaScript. В конце концов, никто не жаловался на JavaScript в Battlefield One, хотя внутриигровой интерфейс рендерится с помощью React!

Говоря об играх: Тобиас Алин (@tobiasahlin) из Mojang, создателей Minecraft, поделился интересными мыслями о своих текущих усилиях по созданию будущего пользовательского интерфейса Minecraft с использованием JavaScript. Они используют оптимизированный движок JS, который работает практически на всех платформах, для интерпретации их кода, чтобы они могли обеспечить производительный результат на всех устройствах, на которых сегодня работает Minecraft. Новый пользовательский интерфейс еще не выпущен публично и все еще находится в стадии разработки, но, по словам Тобиаса, удобные инструменты и рабочие процессы, к которым привыкли разработчики JS, стали долгожданным сюрпризом для разработчиков игры. Теперь они могут быстрее перерабатывать новые идеи и выходить на рынок миллионов разработчиков JavaScript, когда дело доходит до найма.

Хорошо, очевидно, вы можете создавать игры AAA с помощью JavaScript. Но, конечно же, у JavaScript есть свои ограничения, и вы не можете использовать его, скажем, для высокопроизводительных вариантов использования, таких как CDN. Ну да, ты можешь. По крайней мере, Курт Макки (@mrkurt) может. Он настраивает сам движок V8, чтобы получить необходимую производительность, что позволяет его пользователям определять правила для его CDN fly.io с помощью JavaScript. Это позволяет им легко предоставлять функциональные возможности поверх своего приложения, которые они могут предоставлять как можно ближе к своим клиентам.

Мы пишем много кода JavaScript для Интернета, настольных компьютеров или мобильных устройств. Но JavaScript действительно везде!

А если вы хотите побаловать себя и позволить своим роботам танцевать под музыку, вам лучше обратиться к Девон Линдси (@devonbl). Она не только определила танцевальные программы для их отряда роботов, но и придумала, как передать эти программы ботам через Bluetooth. И хотя JavaScript не особенно известен своими приложениями в сценариях реального времени, три маленьких робота, синхронно исполняющие хореографию — разумеется, в прямом эфире перед аудиторией dotJS — показали нам: это работает!

Говоря о «это работает»: я должен вернуться к этому, так что спасибо за чтение и удачного кодирования!

PS: Загляните в официальную фотогалерею.