Проект Ember открыл Призыв к публикациям в блогах, чтобы помочь в написании дорожной карты проекта. Прочтите наши мысли ниже, а затем поделитесь своими с хэштегом # EmberJS2018.

201 Created работает с Ember.js с тех пор, как Кори и я подписали контракт с нашим первым клиентом в 2013 году. Мы медленно, но сознательно развивали бизнес, выбирая проекты, которые позволяли нам и нашим растущим сотрудникам оставаться ближе к фреймворку.

Наша команда в нынешнем виде работала над несколькими десятками приложений. Мы работали над новыми проектами для небольших стартапов, а также над производительностью и удобством обслуживания для хорошо известных сайтов с высокой посещаемостью. Мы провели обучение Ember.js для разработчиков, которые никогда раньше не видели let, и внесли значительный вклад в большую часть кодовых баз Ember и усилия сообщества (включая Ember Community Survey, который сам по себе дает хороший обзор того, что люди думают об Ember. ).

Прошедшие пять лет кажутся нам подходящим временем, чтобы поделиться своими мыслями о том, где находится Ember сегодня и в каком направлении мы бы хотели ее видеть. Чтобы продолжить разговор, я задал команде 201 Created несколько вопросов:

Почему мы рекомендуем Ember нашим клиентам?

Кори (Кори Форсайт): над приложениями Ember легко работать командам. У них последовательная структура, отличная экосистема аддонов и отличный инструмент сборки / клика в ember-cli. Эти же функции помогают нам в 201 Created незамедлительно работать продуктивно, когда мы вступаем в новое взаимодействие с клиентом. Мы можем перейти к кодовой базе с минимумом хлопот, потому что мы знаем, где находятся компоненты, помощники, контроллер, маршруты, надстройки и т. Д. Например, мы можем посмотреть файл шаблона и, даже не глядя на остальные файлы проекта, сделать вывод о контексте поддержки для этого шаблона (его компонента или контроллера) и сделать обоснованные предположения о том, как он вписывается в остальную часть приложения. . Это также помогает разработчикам наших клиентов оставаться продуктивными. Они могут переключать людей в проект Ember и выходить из него, а также поддерживать сразу несколько проектов Ember, потому что соглашения Ember обеспечивают аналогичную структуру с теми же примитивами и концепциями для всех ваших приложений.

В фреймворках, которые более минималистичны или менее привержены подходу «конвенция над конфигурацией», это не так. Мы обнаружили, что клиенты, использующие другие фреймворки, обычно имеют похожие проблемы (маршрутизация, загрузка данных, рендеринг шаблонов, связывание js и т. Д.), Но, когда их фреймворки не предоставляют возможности для этих нужд, решайте их разными способами. В результате в компаниях с несколькими долгосрочными проектами на одной и той же платформе используются совершенно разные подходы к решению одних и тех же проблем, что ограничивает способность разработчиков продуктивно входить и выходить из этих проектов.

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

Исаак (Исаак Эзер): Сообщество Ember делает большую работу по внедрению новых методов и идей, которые появляются в более широком сообществе веб-разработчиков, в framework, чтобы их можно было внедрить в существующие приложения, которые были созданы задолго до того, как эти методы стали заметны кому-либо. Хорошие примеры этого включают движок рендеринга Glimmer, сервис-воркеров и создание настольных приложений с помощью Electron.

Сообщество также хорошо сплачивает меньшее количество общих решений. Большинство пользователей Ember, которые хотят интегрироваться с Google Analytics или Stripe, использовать D3 или протестировать свое приложение на доступность, выберут одно и то же дополнение для каждой из этих целей. Это увеличивает вероятность того, что надстройка, которую вы решите использовать сегодня, все еще будет существовать и активно поддерживаться через несколько лет.

Мэтт (Мэтью Бил): Ember обладает хорошими характеристиками производительности и может адаптироваться к большинству случаев использования, когда уместно одностраничное приложение, но я предлагаю Ember по другим причинам.

Приложения Ember выдерживают. Нередко можно увидеть приложение Ember, которое началось в начале цикла выпуска 1.x, а сегодня обновляется и набирает обороты. Я рад создать такую ​​долгосрочную и продуктивную платформу для наших клиентов.

Ember также чутко реагирует на потребности наших клиентов. Когда проект вводит зависимость, его команда фактически уступает право принимать технические решения в части своей области. В фреймворках, управляемых одной компанией, есть несколько способов повлиять на приоритеты специалистов по сопровождению. Ember как фреймворк, управляемый сообществом, более податлив. Клиенты могут вносить значительный вклад, они могут спонсировать функции, они могут публиковать дополнения и объединять вокруг себя сообщество, они могут писать RFC и могут стать лидерами с четким голосом.

Кевин (Кевин Пфефферле): Как разработчики программного обеспечения, мы весь день работаем над поиском решений проблем. Мне нравится работать над проблемами, характерными для приложения, которое я создаю, но мне не нравится тратить свою умственную энергию на решение шаблонных задач. Я рекомендую Ember для разработки на стороне клиента, потому что большинство шаблонных проблем решаются за меня с помощью фреймворка Ember и экосистемы аддонов. Это позволяет мне сосредоточиться в первую очередь на проблемах, характерных для создаваемого мной приложения.

Джонатан (uosʞɔɐɾ uɐɥʇɐuoɾ): Короче говоря, приложения Ember созданы, чтобы служить долго. В экосистеме JavaScript, которая, как я бы сказал, набирает обороты больше, чем другие, Ember выделяется как хороший вариант для длительных проектов.

В течение многих лет я работал над приложениями, написанными на jQuery, Backbone.js, Angular 1 и Knockout. Каждому требовалась индивидуальная настройка. Ember очень хорошо заботится о шаблонных решениях. Это гарантирует, что новые разработчики могут быть легко приняты на борт. Ember позволяет нам сосредоточиться на интересных проблемах в сфере деятельности нашего клиента вместо того, чтобы заново изобретать инструмент сборки или конвейер активов.

Более того, поскольку Ember делает это с прицелом на будущее, предлагаемые им решения тестируются на многих крупных и долгоживущих приложениях. Это означает, что решения для тестирования, построения конвейеров, управления активами и многого другого действительно хорошо спроектированы и будут вести нашего клиента в будущее.

Почему мы, как консультанты, продолжаем инвестировать в Ember?

Мэтью: Ориентация проекта Ember на общие решения означает, что мы снова и снова видим одни и те же дополнения и дизайнерские решения. Это помогает нам быть невероятно продуктивными с нашими клиентами, часто открывая пул реквест в первые несколько часов взаимодействия. Нельзя сказать, что каждое решение идеально, но, как и любой сложный инструмент, после долгой работы с ним мы узнали, как лучше всего использовать его.

201 Created может сотрудничать с сообществом Ember. Мы инвестировали в проект, проводя семинары, писая, выступая, спонсируя конференции и путешествия, и многое другое. Я чувствую, что у нас есть возможность влиять на проект, помогать ему расти и быть частью этого роста.

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

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

Вокруг Ember также есть фантастическое сообщество, и приятно встречаться с очень умными, талантливыми, полезными и дружелюбными людьми на конференциях по всему миру (Портленд, Сан-Диего, Амстердам), чтобы увидеть удивительные вещи, которые они строят, и как мы можем сотрудничать в проектах с открытым исходным кодом.

Ember имеет отличную основу для продуктивности, но некоторые функции, которые легко «взломать» в других фреймворках, требуют наличия эксперта в Ember. Какие функции страдают от этого и как мы можем улучшить Ember в этом отношении?

Кори: Ember - это комплексный фреймворк. Это качество имеет свои преимущества, но может сделать Ember сложной задачей для новых разработчиков. Например, многие веб-разработчики хотят рассматривать шаблоны Ember как «расширенный HTML». В большинстве случаев это работает нормально, потому что шаблоны Ember очень похожи на HTML со случайными «завитками» в них, но у вас могут возникнуть проблемы, если вы добавите тег <script>. По моему опыту, самый большой источник неприятностей для новых разработчиков - это когда уроки, которые они извлекли из неприукрашенных веб-API (HTML, JS, CSS), неприменимы к Ember.

Другой пример этой трудности - взаимодействие с плагинами jQuery. Почти каждый в прошлом уже «интегрировал» плагин jQuery в веб-сайт, и процесс очень прост: добавьте тег <script> в свой HTML-файл, затем вызовите jQuery.somePlugin API в DOMReady прослушивателе. Архитектура Эмбера не соответствует этой ментальной модели. Вместо того, чтобы помещать тег скрипта в ваш HTML-код, вам нужно вместо этого включить его в свой файл сборки. Сделать это оптимальным образом, чтобы выходные данные плагина могли import, не всегда легко и почти всегда сложнее, чем альтернатива (размещение тега сценария в файле HTML). После того, как плагин jQuery стал доступным в процессе сборки, понимание ловушки didInsertElement - еще один умственный скачок для обучающегося разработчика.

Эти несоответствия импеданса между «как я делал это раньше» и «как Ember хочет, чтобы я это делал» чаще всего возникают, когда я исхожу из менее сложной структуры, будь то React или Vue или (чаще всего) «простой HTML и JavaScript». Сложность, которую привносит Ember, вызывает дискомфорт, когда вы знаете, что есть более простое решение, которое вы использовали раньше, а отсутствие ментальной модели для архитектуры Ember может создать ощущение, что Ember Best Practice более сложна, чем должна быть.

Один из способов улучшить Ember - это сделать все возможное, чтобы больше походить на мир, из которого пришли другие разработчики. Есть множество примеров, когда Ember делал и продолжает делать это. Использование this.get является обычным камнем преткновения, и Ember 3.1 впервые делает возможными геттеры ES5, устраняя многие места, где this.get может понадобиться. Система шаблонов Ember стремительно улучшалась с годами. Не так давно камнем преткновения был тот факт, что <div class="static {{dynamic}}"> не работает, но Ember отшлифовал и эту неровную кромку. Runloop - частый источник FUD для разработчиков, и его важность также активно минимизируется в современном Ember. Эти изменения помогают уменьшить сдвиг ментальной модели, который необходимо совершить новым разработчикам.

Еще один способ стать лучше Ember - это улучшить документацию, чтобы новые разработчики могли быстрее понять необходимые концептуальные строительные блоки Ember. Чем больше они узнают о строительных блоках Ember, тем лучше будет их интуиция относительно того, как его использовать.

Мэтью: Отложенная загрузка частей приложения Ember должна быть простой. У Ember есть декларативные API-интерфейсы для уровня рендеринга и, с унификацией модулей, макет файловой системы, который ограничивает разработчиков в написании приложений, дружественных к отложенной загрузке на основе маршрутов. Приложения Ember должны предоставлять эту функциональность из коробки. Используя для этого Webpack, я думаю, что у Ember есть хорошие шансы на создание более удобного для разработчиков и поддерживаемого решения.

Какие наиболее многообещающие части Интернета следует использовать в Ember?

Мэтью: Инициатива Google Progressive Web App (PWA) всегда была популярна в сообществе Ember, но сам фреймворк по-прежнему не решался принять готовые рекомендации PWA. . Это применимо к тем местам, где сложно выбрать значение по умолчанию, например ServiceWorkers, и к рекомендациям, которые должно быть легче выполнять (например, манифест веб-приложения). Опытные разработчики могут добавить эти функции в свои приложения за считанные минуты, а это значит, что мы затянули немного более сложную работу - сделать их стандартными.

Я давно разочарован слабой поддержкой Ember для веб-компонентов. Путь к улучшению поддержки Ember для веб-компонентов очень ясен: нам нужно сделать атрибуты по умолчанию в шаблонах Ember и ввести явные модификаторы свойств и слушателей (альтернативой может быть введение универсального API модификаторов элементов).

Ember значительно упрощает разработку одностраничных приложений (настройка конвейера сборки, написание надстроек). Что еще может сделать Ember проще?

Кевин: Я хотел бы видеть больше инноваций в области CSS. Ember отлично справляется с задачей, позволяя разработчикам приложений писать передовой JavaScript, который компилируется в совместимый браузер JS. Мне бы очень хотелось, чтобы в области стилей CSS появилось больше этих инноваций. Я очень взволнован новым проектом CSS Blocks, исходный код которого LinkedIn только что открыл на этой неделе, и мне бы хотелось, чтобы сообщество Ember помогло продвинуть внедрение некоторых проектов, подобных этому, которые упрощают написание поддерживаемого CSS. как написание поддерживаемого JavaScript.

Когда вы знакомите с проектом разработчика, не знакомого с Ember, какую историю вы им рассказываете? Какую историю вы хотите рассказать?

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

Раньше я бы тоже рассказывал им об Инспекторе Эмбер. К сожалению, совместимость инспектора с Ember нарушается с большинством ударов glimmer-vm, поэтому на него трудно положиться. Я хотел бы показать, как Ember может упростить отладку вашего приложения. Разработчики, изучающие новый инструмент, такой как Ember, извлекают выгоду из визуального и пространственного представления своего кода в процессе обучения.

Кевин: Я часто рекламирую свой образ мышления в новом проекте, в котором вы создаете автономное приложение для браузера, поэтому думайте об этом, как если бы вы создавали собственное мобильное приложение. приложение для iOS или Android. Такой образ мышления действительно заставляет ваш мозг думать о клиенте и сервере как о двух отдельных, но взаимодополняющих проектах.

Мне бы очень хотелось, чтобы новая волна функций браузера (сервис-воркеры, локальное хранилище и т. Д.) Стала центральным подходом к созданию этих автономных приложений для браузера. Я думаю, что мы все еще слишком застряли в мышлении, что создание одностраничного приложения с Ember - это просто «еще один способ создать свой интерфейс», потому что мы еще не осознали потенциал, существующий для создания «нативных приложений для браузер ».

Что у Ember хорошо получается, но чего не знает большинство людей за пределами сообщества?

Кевин: Я думаю, что ember-cli-deploy сильно недооценивается и практически неизвестен за пределами сообщества Ember. Для многих распространенных стратегий развертывания уже существуют плагины ember-cli-deploy для создания и загрузки приложения Ember и его ресурсов на различные варианты хостинга. Я работал с несколькими клиентами, которые просто предполагали, что нам нужно будет потратить дни на настройку развертывания, но благодаря этой подсистеме развертывание было настроено и полностью автоматизировано всего за несколько часов.

Джонатан: История тестирования в Ember очень преуменьшена. Ember создал средство тестирования, которому позавидовал бы любой другой язык / фреймворк. После многолетнего консультирования я могу сказать, что мало что может быть важнее, чем наличие надежного набора тестов. Это дает вашим инженерам уверенность в том, что, когда они уйдут в пятницу, им не будет пейджинга в полночь. Это дает руководителю понять, что, когда в прошлом месяце команда представит следующую важную функцию, работа не загорится. Если вы хотите внести изменения в свою систему, это не рефакторинг без тестов, это просто перемещение кода. Ember делает весь этот аспект процветающей команды / проекта простым и увлекательным.

Ember CLI предоставляет генераторы для создания тестов для богатого набора уровней абстракции. Хотите протестировать что-то в изолированном модульном тесте? Он вас прикрыл. Хотите протестировать взаимодействие с пользователем? Он вас прикрыл. С этой целью Ember позволит вам легко дождаться завершения асинхронного поведения или, с помощью нескольких надстроек, управляемых сообществом, с легкостью протестировать чередующееся поведение, такое как состояния загрузки.

Если вместо этого вы предпочитаете более сквозной стиль тестирования, вы можете сделать это полностью в ember и заглушить / подделать / смоделировать свой бэкэнд с Ember CLI Mirage, еще одним надстройкой, управляемой сообществом.

Мэтью: Качество тестов приложений Ember практически не имеет себе равных. Шаблоны тестирования в Ember - отличный пример того, как соглашения и использование полного фреймворка могут принести пользу разработчику. Если бы Ember был не фреймворком, а набором библиотек, создание набора тестов, работающего с реальной DOM и целыми приложениями, было бы уникальным инженерным приключением для каждого проекта. Новых разработчиков (а у JavaScript много новых разработчиков) всегда пугает тестирование. Ember может сделать больше, чтобы поделиться историей о тестировании и проповедовать методы тестирования.

Какие инициативы в проекте Ember вы хотите довести до завершения?

Джонатан: Это, безусловно, сложный вопрос, у Ember есть множество передовых технологий, готовых к использованию из библиотеки Glimmer (перспективный экспериментальный проект для функций Ember. ). Я бы сказал, что очень рад, что FastBoot поддерживает регидратацию в приложениях Ember. FastBoot - это готовое решение для рендеринга на стороне сервера для Ember. Регидратация - это функция рендеринга, которая позволяет использовать часть работы, выполняемой во время рендеринга на стороне сервера, на стороне клиента (в браузере) и позволяет Ember повторно использовать большую часть DOM первоначального рендеринга.

Я также хотел бы увидеть шаги в направлении использования более продвинутых функций JS, таких как декораторы и классы. Ember был одним из первых пользователей синтаксиса модуля ES2015, и мы до сих пор видим выгоды от этого решения, поэтому любое принятие будущих функций ES меня также очень волнует.

Мэтью: цикл выполнения Эмбер был неизбежным злом на момент его создания. Сегодня, когда микрозадачи в браузере и встроенные обещания становятся все более распространенными, цикл выполнения больше не является жизнеспособным в том виде, в каком он реализован. Работа может быть запланирована неэффективно, а время выполнения по расписанию сбивает с толку. Цикл выполнения Ember должен завершить переход к стратегии «автозапуск по умолчанию», которая использует очередь микрозадач.

Каковы самые большие препятствия на пути к долголетию Эмбер?

Кевин: Я считаю жизненно важным, чтобы крупные компании, которые так сильно выигрывают от Ember, также вносили свой вклад в проект и экосистему. Это вызов, поскольку у многих из них есть давние традиции хранить в секрете все, над чем они работают. Хотя такой подход имеет смысл для запуска крупных продуктов или бизнес-логики, которая делает основной продукт компании уникальным, крупный проект с открытым исходным кодом, такой как Ember, существует только до тех пор, пока те, кто от него больше всего зависит, продолжают вкладывать средства в его долговечность.

Кори: Принятие решения - большая проблема. Важно, чтобы новые разработчики выбрали Ember. Их идеи и варианты использования помогают продолжать продвигать Ember вперед. Как мы можем улучшить усыновление? Для меня это больше всего маркетинговый вопрос. С технической стороны у Ember есть много чего, но его восприятие в более крупной экосистеме JavaScript окрашено «напористыми разработчиками», которые использовали его однажды (обычно очень давно) и с тех пор больше не использовали. К чести, Ember до сих пор внешне выглядит так же, как несколько лет назад. Стабильность Ember без принципа стагнации выглядит со стороны так, как будто Ember не сильно изменился. В действительности, несмотря на то, что многие из тех же примитивов и API-интерфейсов, которые были созданы много лет назад, все еще существуют сегодня, внутреннее устройство, соответствующие инструменты сборки и экосистема надстроек сильно отличаются (и лучше!), Чем они были в прошлом. Но разработчику, который использовал Ember несколько лет назад, он не понравился, и время от времени заглядывая в него снова, создается впечатление, что в сегодняшнем Ember нет ничего нового, достойного изучения.

Какие части фреймворка вы объясняете разработчикам, потому что документация отсутствует или по каким-либо причинам не работает?

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

Кори: Загрузка данных - это всегда проблема. Выяснить, как и когда загружать необходимые данные для маршрута, не всегда просто. Хотя перехватчики маршрута обеспечивают хороший переход к эффективному использованию уровня данных, по мере роста сложности приложения эти перехватчики могут быть менее эффективными. Понимание того, как использовать отношения, а также когда денормализовать данные и избегать отношений, - это больше искусство, чем наука. Я вижу много разработчиков, которые плохо разбираются в компромиссах между различными решениями моделирования API + Ember Data, и не уверены, что построили что-то правильно.

Вперед!

Что ваша команда ожидает от Ember в этом году? Какие проблемы и возможности вы видите? Как вы планируете участвовать в обсуждениях и обсуждениях вокруг Ember?

Наша команда по большей части сосредоточила свой вклад в прошлом году на том, чтобы помочь Ember выполнить давние обещания. Примерами являются моя собственная работа с Исааком над новым макетом файловой системы Ember и стремление Джонатана выпустить регидратацию в виде общедоступного API. Эти вклады - наш самый мощный голос, они на практике демонстрируют, в чем, по нашему мнению, должны находиться приоритеты проекта.

Какими бы ни были ваши цели и амбиции в отношении Ember, я призываю вас присоединиться к нам и принять участие в проекте Ember. Открытый исходный код принесет вам наибольшую пользу, когда вы отдадите деньги.

В 201 Created мы помогли десяткам клиентов (включая стартапы YC и компании из списка Fortune 50) максимально использовать решения с открытым исходным кодом, такие как Ember. Свяжитесь с нами, чтобы узнать больше о нашей работе и о том, как мы можем удивить ваших пользователей возможностями Интернета.