56
Occasion: Date: Present: Classification : JavaScript, from dark ages to renaissance, the web apps revolution CodeCamp Iasi 10-11-2012 Remus Pereni / Software Architect / [email protected] Public

Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Occasion:Date:

Present:Classification:

JavaScript, from dark ages to renaissance, the web apps revolution

CodeCamp Iasi10-11-2012Remus Pereni / Software Architect / [email protected]

Page 2: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

2

● Diferite modalități de a construi aplicații web● De ce JavaScript?● Librarii și framework-uri● BootstrapJS● EmberJS● AngularJS

Vom povesti despre:

Page 3: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

● 1991 Tim Berner lee @CERN: HTML, HTTP 0.9, WorldWideWeb● 1993 Mark Andersen & NCSA, Mosaic 1● 1994 W3.org (MIT + CERN) / HTML 2● 1996 CSS 1, Netscape 2, JavaScript● 1997 HTML 4● 1998 CSS 2● 1999 RFC 2616 / IETF + W3, HTTP/1.1● 2000 XHTML 1● 2002 Tableless Web Design● 2005 AJAX● 2009 HTML 5

Un pic de istorie

Page 4: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

4

● 1995 Netscape / Brendan Eich● Rol?

o comunicare cu / dinspre Appleti Javao manipulare de continut in pagina

● Netscape 2 / Mocha -> LiveWire-> LiveScript● Redenumit in JavaScript, miscare de marketing destul de ne-

inspirata● Microsoft raspunde cu VBScript iar in 1996 dupa reverse

engineering un port de JavaScript numit Jscript

Un pic de istorie

Page 5: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

5

● 1996 Netscape + Sun propun standardizarea limbajului la ECMA (European Computer Manufacturers Association)

● 1997 Standardizare aceptata si noua denumire EcmaScript

● Standardizarea acopera doar limbajul in sine. ● API-ul de access la DOM -> W3.org

Un pic de istorie

Page 6: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Despre ce anume vorbim?●Aplicații web traditionale (incl. AJAX)

(Thick Server)●Aplicații browser (Single Page)

Caracteristici și categorii de aplicații

Page 7: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Responsabilități Client● Refresh parțial de conținut● Validări● Componente usabileoAutocompleteoDate selectoro ...

● Animație

Aplicații web traditionale (Web 2.0) / Thick Page

Responsabilități Server● Asigură datele● Persistență● Continutul / markup-ul

complet sau partial pentru client

Page 8: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Platforma evoluează rapid

Page 9: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

9

1. Așteptări crescute din partea UI si UX2. Așteptări crescute din partea vitezei de

reacție3. Cerințe noi în privința disponibilității

aplicațiilor pe platforme noi care implică modificări de arhitectură

Direcții de presiune asupra aplicațiilor conventionale

Page 10: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

10

Presiune din partea UI / UX

Page 11: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

11

Presiune din partea UI / UX

Page 12: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

12

Presiune din partea UI / UX

Page 13: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

13

Presiune din partea UI / UX

Page 14: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

14

Presiune din partea / Vitezei de reacție

“According to Harry Shum, a Microsoft computer scientist, computer users will visit a Web site less if its loading time is slower than its competitors by 250 milliseconds, or one-quarter of a second. That is less time than a single eye blink. “( http://www.nytimes.com/interactive/2012/02/29/business/The-Blink-of-an-Eye-Oh-Please.html)

• 500 ms slower = 20% drop in traffic (Google)• 100 ms slower = 1% drop in sales (Amazon)

Page 15: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

15

Presiune din partea / Vitezei de reacție

Page 16: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

16

Presiune din partea / Vitezei de reacție

Page 17: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

17

Presiune din partea / Vitezei de reacție

Page 18: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

18

Presiune din partea / Vitezei de reacție

Page 19: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

19

Presiune din partea / Arhitecturii

PlatformIOS & Android &

Desktop Browser

TypeWeb / HTML5

Runs onIPhone/Ipad

Android phones Regular desktop

OS versionIOS: 4.x, 5.xAndroid: 2.x

TechnologiesHTML5

JavaScriptJQuery Mobile

Phone GapGoogle Chart API

GeolocationWeb services

JSON

Page 20: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

20

Ce soluții sunt?

Page 21: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Responsabilități Client● Continutul / markup-ul

complet sau partial bazat pe datele de la backend

● Validări● Componente usabileoAutocompleteoDate selectoro ...

● Animație● Logică aplicație

Aplicații browser / Single Page

Responsabilități Server● Asigură datele● Persistență

Page 22: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

22

"A web application framework ("WAF") is a software framework that is designed to support the development of dynamic websites, web applications and web services. The framework aims to alleviate the overhead associated with common activities performed in Web development.” (Wikipedia)

Web Application Framework

Page 23: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

23

Functionalitățio Templatingo Access la baza de dateo Managementul sesiunii (session management)o Decuplare de componente / Pattern-uri

(varianta de MVC de obicei)o Mapare URLo Internaționalizare (i18n)o Caching

Web Application Framework

Page 24: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

24

Evoluție

Page 25: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

25

● multitudine de optiuni● putine standarde si convenții● fiecare librarie propria interpretare de MVC● o data adoptat un stack, devii dependent de el

Dezvoltarea de aplicații JavaScript

Page 26: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

26

Librării Framework-uri

Backbone Ember

Knockout AngularJS

Spine Batman

CanJS Meteor

Se adauga la proiect, adauga functionalitate dar nu impune arhitectură

Îți impune / dă o arhitectură (structură de fișiere, ….) și încearcă să se ocupe de toate aspectele

Dezvoltarea de aplicații JavaScript

Page 27: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

●http://backbonejs.org

● Jeremy Ashkenas and DocumentCloud

●Foarte popular

●Open Source (MIT)

●Model View

●Minimal, doar 800 linii de cod

●Modele persistabile REST cu mecanism simplu de rutare

●Depinde de / se foloseste împreuna cu:

o _underscore.js

o JQuery

o template engine (_.template, Mustache, Handlebars)

Backbone.js

Page 28: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

●modele obțin procesează și stochează datele

●view-uri, afiseaza datele

●route, navighează, salvează și restaurează starea aplicației folosind url-urile

Backbone.js

Page 29: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

●Backbone.Model

o fetching, processing and storing data

o modificari in date -> change events

o syncronizare standard via REST

Backbone.js

Page 30: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Clase de bază

●Backbone.Events

o callback registration, event dispatch

o methode: on, off, trigger

●Backbone.Collection

o liste de modele care publică change events (add, remove, reset)

Backbone.js

Page 31: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Backbone.js

Page 32: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Backbone.View

● tine referintă la un element DOM și face rendering-ul la datele din model

● Știe despre modelul sau respectiv colecțiile de care țin

● Gestioneaza evenimentele DOM (user input)

● Observa evenimentele din modele (binding)

● Apelează metode din modele sau declansează evenimente pe ele

Backbone.js

Page 33: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Clase de bază

●Backbone.Router

o Observă modificările de URL și declanșează evenimente la modificarea lui

o Mapează URL-uri pe methode JavaScript

o De cele mai multe ori constituie parte din controller (instanțiază modele și view-urile)

●Backbone.History

o HTML5 History (pushState / popState)

o fallback pe modificarile hash-lui din URI #

Backbone.js

Page 34: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Backbone.js

Page 35: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

35

Aria Responsabilitate

OOP & Functional Programming Underscore

DOM Scripting JQuery

HTML Templating Underscore, Handlebars, …

API Communication Backbone*

Application Structure Backbone*

Routing & History Backbone

Model-View-Binding Backbone

Modularization & Dependency management

RequireJS, …

Backbone.js

Page 36: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

36

●extrem de configurabil si flexibilo nu in direcția “convențion over configuration”

●abordare intenționat minimalistă

●nu e o soluție completă / independentă

Backbone.js

Page 37: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

●http://emberjs.com/

●Construit De Yehuda Katz of Ruby on Rails

●Tot de ce ai nevoie pentru a construi o aplicație web ambițioasa

●Construit pe JQuery

●Rădăcinile le are in Sproutcore2 / COCOA

●Open Source / MIT

●Approx 40k minimizat si gzipat

●Framework MVC

●Opinionated / “The Ember Way”

Eember.js

Page 38: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

38

Ember.js

Page 39: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

39

Ember.js

● Gândit foarte bine pentru cum să-ți descompui paginile intr-o ierarhie de controale si cum sa le legi intr-un system bazate pe state-uri

● Convention over configurationo elimină deciziile trivialeo reduce codul applicațieio crește predictibilitatea execuției

● Librărie sofisticată pentru comunicare, access la date (Ember.data) în dezvoltare

● Intenționată pentru a controla intraga pagină nu insulițe de continut dinamic

Page 40: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

40

Ember.js

● Ember.Viewo noțiunea de hierarhie

• parrent view / child viewo delegate eventso asigura renderingul o componentele sunt

• reutilizabile• compozabile

o automatizări la• automatic cleanup la toate binding-urile si observerii registrati de si

pe copii• eliminarea automata a referințelor pentru a elimina sursele de

probleme de memorieo evenimente de lifecycle

• inainte de rendering• inainte de distrugere• …

Page 41: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

41

● Routeleo traditionale nu sunt cele mai

fiabile ca mechanism

● Suplinite cu state chartso un obiect / stareo stările sunt modelate hierarhico raspund la evenimenteo poate trece in alta stare

● Beneficii?oNu poti fii in 2 stari in acelasi

timpo Te forteză să gândești ce

evenimente sunt valide in care stări

o Permite verificări (fail fast, evenimente inregistate pe stări dar netratate)

Ember.js

Page 42: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

42

Ember.js

Routes

Page 43: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

43

Ember.js

Clase

Page 44: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

44

Ember.js

Mixins

Page 45: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

45

Ember.js

Computed properties

Page 46: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

46

Ember.js

Namespaces

Page 47: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

47

Ember.js

Observeri

Page 48: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

48

Ember.js

Binding

Page 49: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

49

● Ember.Application● Ember.Array● Ember.ArrayController● Ember.ArrayProxy● Ember.Binding● Ember.Checkbox● Ember.CollectionView● Ember.Comparable● Ember.ComputedProperty● Ember.ContainerView● Ember.Controller● Ember.ControllerMixin● Ember.Copyable● Ember.CoreObject● Ember.Deferred● Ember.Enumerable● Ember.Error● Ember.Evented● Ember.Freezable● Ember.Handlebars● Ember.Handlebars.helpers● Ember.HashLocation

Ember.js

● Ember.HistoryLocation● Ember.Logger● Ember.Mixin● Ember.MutableArray● Ember.MutableEnumerable● Ember.Namespace● Ember.NativeArray● Ember.NoneLocation● Ember.Object● Ember.ObjectController● Ember.ObjectProxy● Ember.Observable● Ember.RenderBuffer● Ember.Routable● Ember.Route● Ember.Router● Ember.Select● Ember.Set● Ember.SortableMixin● Ember.State● Ember.StateManager● Ember.TargetActionSupport● Ember.TextArea● Ember.TextField● Ember.View

Page 50: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

50

Aria Responsabilitate

OOP & Functional Programming Ember

DOM Scripting JQuery

HTML Templating Handlebars

API Communication Ember

Application Structure Ember

Routing & History Ember

Model-View-Binding Ember

Modularization & Dependency management

RequireJS, …

Ember.js

Page 51: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

51

● http://www.angularjs.org● Creat si folosit de către Google● bazat pe JQuery● MVW* (Whatever)● Include propriul templateing system● approx 500k● IE8+, Chrome, FF, Safari, Opera● Databinging (mai naturale)● Modelele sunt obiecte normale JavaScript● Dependency Injection● Conceptual este un polyfill intre ce fac browserele astazi si ce

vor face nativ in anii următori● Nu impune o arhitectură sau layout● Poate lucra în insulițe mici de pagină

Angular.js

Page 52: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

52

Angular.js

Template

Page 53: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

53

Angular.js

Rutare

Page 54: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

54

Aria Responsabilitate

OOP & Functional Programming Angular

DOM Scripting JQuery

HTML Templating Handlebars

API Communication Ember

Application Structure Ember

Routing & History Ember

Model-View-Binding Ember

Modularization & Dependency management

RequireJS, …

Angular.js

Page 55: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

55

http://addyosmani.github.com/todomvc/

Page 56: Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the web apps revolution

Diamond Sponsors

Platinum Sponsors Gold Sponsors

Training Partners Media Partners Other Partners