Javascript in modern scala backend. [russian]

793 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
793
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Javascript in modern scala backend. [russian]

  1. 1. FOSS-SEA 2013 JavaScript & modern scala backend Ruslan Shevchenko <ruslan@shevchenko.kiev.ua> @rssh1 (gradsoft, gosave)
  2. 2. Есть ли у нас план ? ● - обзор архитектур web приложений – ● - scala-frameworks – ● 90, MVC, ROR-Like, one-page .. lift, play, spray.io, scalatra - использование и генерация javascript – jscala, scala-js
  3. 3. 90-е Запрос / Страничка html (JavaScript испрользуется только локально)
  4. 4. Структризация обработки C M V MVC Разделение на блоки контроллера, модели и представления
  5. 5. Конфигурация по умолчанию C M V MVC Раутер, контроллер и модель структрируются автоматически на основе соглашений
  6. 6. Появление Ajax C M V MVC Javascript может делать запросы к серверу и Подгружать информацию
  7. 7. Rich client C M V REST Presentation Layer переезжает на клиент
  8. 8. Rich client/ backbone style C V M REST Взаимодействие = синхронизация моделей
  9. 9. Rich client / Angular style C V M RPC Клиент - самостоятельно приложение (обращается по RPC)
  10. 10. Тенденции M C V RPC Если persistence умеет REST — зачем нам application ?
  11. 11. Тенденции C M V Возможность интеракций инициированных сервером (websockets, comet)
  12. 12. Scala ● ● Почему не javascript ? - static typing. ● ● ● ● ● <troll-mode-on> [99, 100, 101].sort() </troll-mode-off>
  13. 13. Scala ● Почему javascript ? ● - описание структур ● - передача на клиент поведения ●
  14. 14. Main frameworks: ● Lift – ● Play – ● (mainstream, ROR analog) Spray.io – ● (old-style, presentation first) (ligthweight, RPC style) Scalatra – (servlet compatible)
  15. 15. Lift def render = { "type=submit" #> SHtml.submit("Register", process, "onclick" -> JsIf(JsEq(ValById("first_name"), ""), Alert("alert") & JsReturn(false)).toJsCmd) } Работа фреймворка – преобразование XML (свои теги)
  16. 16. Play – раутер — конфигурация - контроллер — синхронная или Асинхронаая функция из Request в response - view – compile-time шаблоны (мы не используем) Netty, в будущем — миграция на spray.ioo
  17. 17. Play / Example def index = Action.async { val futureInt = Future { intensiveComputation() } val timeoutFuture = Promise.timeout("Oops", 1.second) Future.firstCompletedOf(Seq(futureInt, timeoutFuture)).map { case i: Int => Ok("Got result: " + i) case t: String => InternalServerError(t) } }
  18. 18. Play/JSON case class Person( name: String, age: Int) object Person{ implicit val personFmt = Json.format[Person] }
  19. 19. JavaScript / scala ● Write in scala, produce javascriot – Jscala http://www.jscala.org ● – (lightweight, macros, from Alexander Nemish, Kiev) Scala-js http://www.scala-js.org ● (fully functional scala-to-js compiler, EPFL institute)
  20. 20. jscala import org.jscala._ @JavaScript class Test { def hello() { print("Hello") } } val testJs = Test.javaScript.as[JsStmt] // Get class Test JsAst val main = javascript { val t = new Test() t.hello() }
  21. 21. jscala import org.jscala._ @JavaScript class Test { def hello() { print("Hello") } }
  22. 22. jscala val testJs = Test.javaScript.as[JsStmt] val main = javascript { val t = new Test() t.hello() }
  23. 23. jscala ● Исполнение – макросы – ● @JavaScript, javascript{ .. } Подмножество scala – – Урезанные управляющие структуры, – ● нет стандартные scala-lib DOM API динамическое(пока) Компактный читаемый javascript без runtime
  24. 24. scala-js ● Полноценный компилятор ● Все фичи скалы, ● Полноценная библиотека ● Порядка 10 Mb рантайма / стандартных бибилиотек (js) – Используется google closure дл я минимизации
  25. 25. Scala/javascript ● ● - API - спецификация API пишется на ● ● (thrift) - генерация (jscala, scala-js) ● ● - асинхронность ● ● Scala – Akka Erlang, RxJava
  26. 26. Спасибо за внимание ● ● Вопросы ? ● ● ● ● ● - Руслан Шевченко @rssh1 ​<ruslan@shevchenko.kiev.ua>

×