Релиз EMBER.JS 2.0


Ember.js 2.0 — нетрадиционный релиз. После 13 доработанных версий за последние 2 года мы решили полностью сосредоточиться на том, чтобы убрать весь хлам в качестве основы для последующего развития.

В Ember 2.0 удалены только те свойства, которые устарели еще в версии 1.13. Поэтому приложения, которые запускались в 1.13 без предупреждений об устаревших элементах, должны без проблем работать в Ember 2.0.

Теперь все новые приложения должны использовать Ember 2.0. В приложениях, где требуется Ember-Data, следует использовать Ember-Data 2.0.0-beta.1 (вскоре появится полноценная версия 2.0).

Новые особенности EMBER.JS 2.0

  • <Это место намеренно оставили пустым!>

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

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

Мы постарались подвести каждую кодовую базу Ember к версии 2.x. Для гарантии мы пометили все удаленные элементы из 2.0, как устаревшие из серии 1.х. Если ваше приложение запускалось на Ember 1.13 без использования устаревших средств, то оно должно работать и на 2.0. Нет новых особенностей, которые нужно адаптировать или перенимать.

В первых релизах Ember 2.x мы планируем представить ряд великолепных функций. Еще более мы взволнованы тем, что тысячи существующих приложений будут готовы сразу их использовать. Подробнее об этом ниже.

Удаленные API

В глубине души мы привыкли называть Ember 2.0 «сборником хлама». Два года – это достаточно большой срок для разработки фреймворка, и мы внесли многие вещи в этот релиз.

Следующие ресурсы будут полезны разработчикам, которые решили перейти на новую версию:

  • Руководство по устаревшим средствам серии 1.x содержит общую информацию и способы переноса для многих устаревших элементов, начиная с Ember 1.7. Кроме того, это руководство связано с сообщениями об устаревших элементах в консоли браузера.
  • Ember Inspector — необходимый инструмент для отладки приложений Ember, который предлагает некоторые средства для управления устаревшими функциями.
  • В июле члены основной команды разработки Роберт Джексон и Мэттью Бил, представили дополнение ember-cli-deprecation-workflow. Этот инструмент помогает управлять обновлениями в кодовой базе при помощи сообщений об устаревших элементах. Посмотрите это видео с митапа в Нью-Йорке, где Роберт рассказывает об обновлении рабочих процессов.
  • Дополнение ember-debug-handlers-polyfill представляет API с возможностью «сохранения на будущее», который позволяет писать собственные инструменты для работы с обновлениями.

Несколько основных удаленных API.

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

Мы понимаем, что разработчики существующих приложений сразу не откажутся от представлений, и потребуется время. Поэтому мы выпустили дополнение для совместимости ember-legacy-views, которое позволит отсрочить переход еще на несколько релизов. Обещаем поддерживать это дополнение как минимум до версии Ember 2.6.

Если же вы создаете новое приложение, то в нем уже будут использоваться компоненты. Существующие приложения также следует перестроить с помощника {{view}} и Ember.Views на компоненты.

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

Также мы сократили число сценариев использования для Контроллеров.

Как и с представлениями, мы обеспечили дополнение совместимости ember-legacy-controllers, которое позволит вам отсрочить переход. Мы будем осуществлять поддержку этого дополнения до версии Ember 2.6.

Если вы пишите новое приложение, то контроллеры вам понадобятся, только чтобы управлять параметрами запроса и поддерживать связь с маршрутом (как в transitionTo). Для таких случаев в Ember 2.0 предусмотрена поддержка контроллеров верхнего уровня без дополнения. И хотя мы планируем полностью заменить сценарии использования в серии 2.х, все, что работает без дополнения совместимости, будет работать вплоть до версии 3.0.

Существующие приложения нужно реорганизовать, отказавшись от использования свойства {{controller}} в пользу контроллеров проксирования (ArrayController и ObjectController), itemController и т.д.

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

ReduceComputed и ArrayComputed устарели, когда в Ember 1.13 появилось средство отображения Glimmer. Эти API позволяли осуществлять операции с массивами без создания новых массивов. Вычисление разницы значения Glimmer исключает эту необходимость. Макросы вычисляемых свойств, которые производят действия с массивами, все еще есть, но они просто не поддерживаются ReduceComputed.

В Ember 2.0 также убрали перемещение контекста в шаблонах ({{#each}} и {{#with}} без блочных параметров). Теперь для любого шаблона есть только один параметр, и со стороны шаблона его не может изменить никакой помощник. Так проще воспринимать шаблоны, и это раскрывает возможности для увеличения производительности.

В Ember 2.0 больше нет поддержки IE8. Во всей серии 2.x будет поддерживаться IE9 и выше.

Устаревшие помощники Handlebars заменили на Ember.Helper API. Этот API не предоставляет помощникам механизм для приема блока, но предлагает поддержку вложенных помощников, которые можно использовать вместе со встроенными помощниками (вроде {{#if}} и {{#each}}), чтобы получить тот же результат.

Более подробный перечень удаленных элементов представлен в CHANGELOG.md.

Дальнейшие перспективы

В нескольких последних релизах Ember 1.x мы добавили много новых функций. Эти дополнения, включая полностью новое средство отображения, сохраняли обратную совместимость. Неудивительно, что поддержка семантики двух средств отображения (помимо прочего) представляла скопление хлама. Обеспечение обратной совместимости для устаревших API серьезно сказывается на производительности приложений Ember и, конечно, на развитии самого проекта.

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

Убрав мусор, можно продолжить расширение фундамента, который был заложен в серии Ember 1.x.

Улучшенная периодичность релиза

Начиная с Ember 1.0, мы придерживались Семантического управления версиями, и усердно работали, чтобы поддерживать совместимость с публичным API и добавлять новые функции. При подготовке к критическим изменениям в Ember 2.0 мы совершили много ошибок, в результате которых наши пользователи столкнулись с массой пересмотров релиза.

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

Это чувство шло вразрез с нашими целями в развитии релиза. Поэтому в дополнение к длительному поддержанию 6-недельного цикла выпуска, у нас есть довольно много вспомогательных настроек для серии 2.х. Они должны помочь нам избежать подобных проблем в конце цикла 2.х.

Некоторые примеры улучшений:

  • Релизы (RFC #56) LTS (с долгосрочной поддержкой), которые дают пользователям возможность обновляться не чаще одного раза в 6 недель.
  • Обязательная документация. В Ember 2.0 не добавят ни одной новой функции без соответствующей документации.
  • Больше информации по устаревшим элементам. Все устаревшие элементы будут включать информацию, в каком релизе их поведение удалили, и ссылку на инструкции по переходу.
  • Улучшенные инструменты для работы с устаревшими элементами. Более информативные устаревшие средства позволяют усовершенствовать панель инспектора Ember по работе с этими средствами и сделать ее более полезной для их пошаговой переработки. В частности, мы сможем не изводить вас (изначально) удалением элементов, но это пока в перспективе. Более подробную информацию и прилагаемые комментарии можно получить здесь: RFC #65.
  • Гибкие сборки. Они позволяют указать Ember CLI, чтобы она не включала устаревшие функции, которыми вы больше не пользуетесь. Это снизит нагрузку на будущие ключевые релизы.

Основные мысли по EMBER 2.X

Кроме усовершенствованного процесса выпуска, вы можете надеяться на несколько высококлассных улучшений в серии 2.Х.

Соответствие с JavaScript. В серии 2.х мы продолжим попытки сближения Ember с ES6 и будущими версиями JavaScript. Так как проект декораторов в JavaScript становится стабильным, и транспилеры улучшают их реализацию, мы планируем адаптировать вычисляемые свойства и другие API под этот синтаксис.

Модули Javascript. Мы также продолжаем развиваться в сторону модульного стиля разработки и отказываться от глобального стиля. Среди прочего, это позволит нам более активно автоматизировать удаление «мертвого» кода.

Стабилизация и интеграция. Экосистема Ember продолжит стабилизироваться и плотно интегрироваться. Ember-Data и Ember CLI будут развивать версии в соответствии с самим Ember. То есть они будут придерживаться той же обратной совместимости и политики пошаговых изменений, что были в Ember серии 1.х.

Ember Data. С выходом Ember 2.0 Ember Data станет неотъемлемой частью релизов Ember. Она будет придерживаться семантического управления версиями, как в Ember, и каждый релиз фреймворка будет включать совместимую с ним версию Ember Data. Таким же образом, Ember Data не получит критических изменений до версии 3.0.

Новые функции уже на подходе

Многие наши планы уже были раскрыты в публикациях RFC и обсуждениях на GitHub, но позвольте резюмировать информацию.

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

Компоненты в угловых скобках и односторонний поток данных. В Ember 2.x мы перенесем компоненты в угловых скобках. Например, вместо {{my-button}} мы увидим <my-button>. Они будут взаимодействовать с односторонней привязкой в рамках более крупного перехода к стилю программирования DDAU («данные вниз, действия вверх»). Вы прочитаете об этом, когда мы внедрим функции. Мы собираемся добавить эти компоненты в версии 2.2 и дорабатывать в следующих релизах. Читайте о наших успехах здесь: RFC #60 и PR #12011.

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

Маршрутизируемые Компоненты. После внедрения компонентов в угловых скобках и структуры pods, мы сможем перенести последние несколько сценариев использования для контроллеров на долгожданные Маршрутизируемые Компоненты. Следите за нашим прогрессом здесь: RFC #38 и PR #11939.

FastBoot — библиотека предварительного отображения на стороне сервера, представленная в альфа-версии релиза Ember. Мы будем совершенствовать и стабилизировать ее на протяжении всего жизненного цикла серии 2.x. Подробнее о ней можно узнать на GitHub: ember-cli-fastboot.


Комментарии (0)

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.