Статьи

Play 2.0, веб-фреймворк для новой эры

На этой неделе я нахожусь в Антверпене, Бельгия, на ежегодной конференции Devoxx . Проехав вчера 21 час от двери до двери, я проснулся и пришел на конференцию, чтобы присутствовать на некоторых выступлениях по Play и PhoneGap. Я только что вышел из сессии на Play 2.0 , которую представили Садек Дроби и Гийом Борт . Ниже приведены мои заметки из этой презентации.

Выпущена бета-версия Play 2.0! Вы можете прочитать больше об этом выпуске в списке рассылки . Эта бета-версия включает встроенную поддержку для Scala и Java, что означает, что вы можете использовать оба в одном проекте. Релиз также включает Akka и SBT по умолчанию.

Что касается других новостей, Play 2.0 теперь является частью стека Typesafe . Typesafe — это компания Scala, основанная основателем Scala ( Мартином Одерским ) и основателем Akka ( Йонасом Бонером ). Гийом также входит в консультативный совет Typesafe.

Садек и Гийом работают в zenexity , где Play является секретным оружием для веб-приложений, которые они создали за последнее десятилетие. Игра родилась в реальном мире. Они продолжали слушать рынок, чтобы увидеть, что они должны добавить к проекту. В какой-то момент они поняли, что не могут продолжать добавлять к старой модели, и им нужно было создать что-то новое.

Сеть превратилась из статических страниц в динамические (ASP, PHP). Оттуда мы перешли к структурированным веб-приложениям с фреймворками и MVC. Затем сеть перешла на Ajax и продолжила опрос в режиме реального времени. И это все меняет.

Теперь нам нужно адаптировать наши инструменты. Нам нужно обрабатывать огромные потоки данных. Необходимо улучшить выразительность для параллельного кода. Нам нужно выбрать соответствующее хранилище данных для проблемы (не только SQL). Нам необходимо интегрироваться с быстро развивающимися технологиями на стороне клиента, такими как JavaScript, CoffeeScript и Dart. Нам нужно использовать эластичное развертывание, которое позволяет увеличивать и уменьшать масштаб.

zenexity хотела интегрировать все эти современные веб-потребности в Play 2.0. Но они также хотели, чтобы Play был доступным. Они хотели сохранить быстрый оборот, чтобы вы могли изменить свой код и нажать перезагрузить, чтобы увидеть изменения. Они хотели сохранить его как полностью стековую инфраструктуру с поддержкой JSON, XML, веб-сервисов, заданий и т. Д. И они хотели продолжать использовать соглашения о конфигурации.

В этот момент Гийом сделал демо-версию бета-версии Play 2.0, продемонстрировав нам, как он использует SBT и имеет консоль, чтобы все работало очень быстро. Вы можете иметь файлы Scala и Java в одном проекте. Шаблоны Play 2.0 основаны на Scala, но вам не нужно знать Scala, чтобы использовать их. Возможно, вам придется научиться писать цикл for в Scala, но это всего лишь подмножество Scala для шаблонов и представлений. SBT используется для системы сборки, но вам не нужно изучать или знать SBT. Все старые команды воспроизведения все еще работают, они просто работают на другой системе.

После демонстрации Садек вступил во владение и начал обсуждать ключевые особенности Play 2.0.

Чтобы обрабатывать огромные объемы данных, вам нужно разбивать их на части и иметь возможность обрабатывать поток данных, а не просто ждать, пока он не закончится. InputStream в Java устарел и имеет слишком низкий уровень. Его метод read () читает следующий байт данных из входных данных, и этот метод может блокироваться, пока входные данные не станут доступны.

Чтобы решить эту проблему, Play включает функцию реактивного программирования, которую они позаимствовали у Haskell. Он использует Iteratee / Enumerator IO и использует инверсию управления (не как внедрение зависимостей, а скорее не микроуправление). Эта функция позволяет вам контролировать, когда вам это нужно, поэтому вам не нужно ждать завершения потока ввода. Перечислитель — это компонент, который отправляет данные, а Iteratee — это компонент, который получает данные. Iteratee выполняет инкрементную обработку и может сообщить Enumerator, когда это будет сделано. Итератор может также отправить продолжение, где он сообщает перечислителю, что ему нужно больше данных и как их передать. С помощью этой парадигмы вы можете делать много интересных вещей, не тратя ресурсы и не блокируя поток данных.

Akka — это система акторов, которая является отличной моделью для выполнения параллельного кода. Актер может быть и перечислителем, и итератором. Это значительно улучшает выразительность параллельного кода. Например, вот как вы можете использовать Akka в Play:

def search(keyword: String) = Action {
  AsyncResult {
    // do something with result
  }
}

Play не пытается абстрагировать доступ к данным, потому что хранилища данных теперь другие. Вы не хотите думать обо всем как об объектах, если вы используете что-то вроде MongoDB или перемещаетесь по Social Graph. Play 2.0 предоставит несколько модулей по умолчанию для разных хранилищ данных, но они также ожидают много дополнительных модулей. Anorm будет реализацией SQL по умолчанию для Play Scala, а Ebean будет реализацией ORM по умолчанию для Play Java. Причина, по которой они отошли от Hibernate, в том, что им нужно что-то более безгражданское.

На стороне клиента так много технологий (LESS, CoffeeScript, DART, Backbone.js, jQuery, SASS), что они не хотели связывать их, потому что они движутся слишком быстро. Вместо этого вы можете добавить плагины, которые помогут вам использовать эти технологии. На клиентской стороне вы можете воспользоваться множеством богатств, и вам нужны инструменты для этого.

Наконец, существует новый тип развертывания: развертывание без контейнера в облаке. Akka позволяет распределять ваши задания по многим серверам, а Heroku представляет собой реализацию гибкого развертывания со встроенной поддержкой Play.

Они объяснили, что они пытались спроектировать, и результаты этой новой, чистой архитектуры оказались удивительными. Побочные эффекты включают: безопасность типов везде для надежных применений. У Scala потрясающий прирост производительности. Там проще интеграции с существующими проектами через SBT. Для разработки HTTP-сервера, отвечающего на веб-запросы, требуется всего 10 строк кода.

Потребление памяти поразительно: при запуске приложения Play 2.0 используется всего 2 МБ кучи. Тесты на ноутбуке Гийома показали, что он может обрабатывать до 40 000 запросов в секунду без какой-либо оптимизации JVM. Мало того, но после того, как запросы исчезают, сборщик мусора очищает все и уменьшает потребление памяти до 2 МБ.

В этот момент Гийом сделал еще одну демонстрацию, показывающую, как в 2.0 все безопасно для типов, включая файл маршрутов. Если вы неправильно наберете (или закомментируете) какие-либо маршруты, компилятор найдет их и уведомит вас. Play 2.0 также содержит функцию скомпилированных ресурсов . Это позволяет вам использовать Google Closure Compiler , CoffeeScript и LESS . Если вы поместите ваши файлы LESS в app / assets / stylesheets , в вашем браузере появятся ошибки компиляции. Если вы поместите файлы JavaScript в app / assets / javascripts , будет использован компилятор Closure, и в вашем браузере появятся ошибки компиляции.

Play 2.0 поставляется с 3 различными примерами приложений, все реализованы на Java и Scala. HelloWorld — это больше, чем просто текст в браузере, он включает в себя форму, которая показывает, как работает проверка. Другое приложение — компьютерная база данных. Когда Гийом запустил его, мы увидели, как эволюции использовались для создания схемы базы данных из браузера. Команда разработчиков сделала все возможное, чтобы процесс разработки основывался на браузере, а не на том, чтобы заглядывать в консоль. Компьютерная база данных является хорошим примером того, как сделать CRUD, и использует Bootstrap Twitter для его внешнего вида.

Последний пример приложения — это zentasks. Он использует Ajax и реализует безопасность, чтобы вы могли видеть, как создать форму входа. Он использует LESS для CSS и CoffeeScript и содержит такие функции, как редактирование на месте. Если вы хотите увидеть какое-либо из этих приложений в действии, вы можете зайти на стенд Typesafe на этой неделе в Devoxx.

К сожалению, для приложений Play 1.x пути миграции не будет. API кажется очень похожим, но есть небольшие изменения, которые усложняют это. Самое главное, как шаблонизация изменилась с Groovy на Scala. Для перехода с 1.2.x будет в основном копировать / вставить, изменить процесс. Есть люди, работающие над получением шаблонов Groovy, работающих в 2.0. Хорошей новостью является то, что zenexity имеет сотни приложений 1.x в производстве, поэтому, вероятно, 1.x будет поддерживаться в течение многих лет.

Резюме

Это был отличный разговор о том, что нового в Play 2.0. Мне особенно нравится встроенная поддержка LESS и CoffeeScript и акцент на том, чтобы стараться, чтобы разработчики использовали два инструмента: их редактор и браузер. Примеры приложений выглядят великолепно, но документация выглядит скудно. Я сомневаюсь, что мне удастся перенести приложение Play 1.2.3 на 2.0 в этом месяце, но я надеюсь попробовать перенести его до конца года.

 

От http://raibledesigns.com/rd/entry/play_2_0_a_web