Your SlideShare is downloading. ×
  • Like
Javascript in modern scala backend.  [russian]
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Javascript in modern scala backend. [russian]

  • 286 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
286
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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