SlideShare ist ein Scribd-Unternehmen logo
1 von 80
&

ako vytvoriť škálovateľnú Javascript web-aplikáciu
Prečo Reqire.JS?

    Web stránky => Web aplikácie
   stúpa komplexita kódu ako aplikácia rastie



    Ručný wiring sa stáva nemožný
   developeri potrebujú nástroje na “modularizáciu”



    Optimalizovaný deployment
   výsledný build s pár HTTP rqs
Web stránky => Web aplikácie
klasické web stránky vrátia vždy celý dokument
Web stránky => Web aplikácie
klasické web stránky vrátia vždy celý dokument
Web stránky => Web aplikácie
klasické web stránky vrátia vždy celý dokument
Web stránky => Web aplikácie
klasické web stránky vrátia vždy celý dokument
Web stránky => Web aplikácie
klasické web stránky vrátia vždy celý dokument
Web stránky => Web aplikácie
klasické web stránky vrátia vždy celý dokument
Web stránky => Web aplikácie
Web-app bootstrapne, potom už posiela iba payload
Web stránky => Web aplikácie
Web-app bootstrapne, potom už posiela iba payload
Web stránky => Web aplikácie
Web-app bootstrapne, potom už posiela iba payload
Web stránky => Web aplikácie
Web-app bootstrapne, potom už posiela iba payload
Web stránky => Web aplikácie
Web-app bootstrapne, potom už posiela iba payload
Web stránky => Web aplikácie
Web-app bootstrapne, potom už posiela iba payload
Prečo web-aplikácie
Rýchlosť
Prečo web-aplikácie
Rýchlosť
 Jacob Nielsen o časoch odozvy

• 0.1 seconds gives the feeling of instantaneous response — that is, the outcome feels
  like it was caused by the user, not the computer. This level of responsiveness is
  essential to support the feeling of direct manipulation.

• 1 second keeps the user's flow of thought seamless. Users can sense a delay, and thus
  know the computer is generating the outcome, but they still feel in control of the
  overall experience and that they're moving freely rather than waiting on the computer.

• 10 seconds keeps the user's attention. From 1–10 seconds, users definitely feel at the
  mercy of the computer and wish it was faster, but they can handle it. After 10 seconds,
  they start thinking about other things, making it harder to get their brains back on
  track once the computer finally does respond.
Prečo web-aplikácie
“Tučný klient” je rýchlejší

 • Spracovať a poslať JSON je jednoduchšie ako HTML

 • Niektoré interakcie nepotrebujú spoluprácu servera

 • Optimistické server operácie
Prečo web-aplikácie
Server je mŕtvy

• Je jednoduché začať “tučný” projekt:
  • statické HTML
  • engine v Javascripte
  • odozvy servera z pripravených .JSON
Prečo web-aplikácie
Server je mŕtvy

• Je jednoduché začať “tučný” projekt:
  • statické HTML
  • engine v Javascripte
  • odozvy servera z pripravených .JSON


 Pridať “živý” server
 môžete kedykoľvek!
Ručný wiring sa stáva nemožný
Väčšie JS aplikácie rastú v chaos
Ručný wiring sa stáva nemožný
Ručný wiring sa stáva nemožný
Kto by toto chcel ručne “wirovať”?
Front-end devs požadujú pekné
API pre <script> loading
Front-end devs požadujú pekné
API pre <script> loading
Front-end devs požadujú pekné
API pre <script> loading




  require() nemôže byť synchrónna operácia
inak browser bude blokovať
Front-end devs požadujú pekné
API pre <script> loading
Dostupné možnosti
<script> loadingu v prehliadačoch
Dostupné možnosti
<script> loadingu v prehliadačoch
XHR




                  /js/types/person.js




      “var Person = function() { /* foo bar */ };”
Dostupné možnosti
<script> loadingu v prehliadačoch
XHR

• Potrebuje eval(), kód modulu je string!

• Podora cross-origin-resource-sharing (CORS) nie je úplná

• Počas ladenia nesedia čísla riadkov s pôvodným kódom
Dostupné možnosti
<script> loadingu v prehliadačoch
XHR

• Potrebuje eval(), kód modulu je string!

• Podora cross-origin-resource-sharing (CORS) nie je úplná

• Počas ladenia nesedia čísla riadkov s pôvodným kódom

• Dôležitá issue:
  • potrebujeme poznať závislosti modulu pred spustením
Dostupné možnosti
<script> loadingu v prehliadačoch
Webworkers
Dostupné možnosti
<script> loadingu v prehliadačoch
Webworkers
Dostupné možnosti
<script> loadingu v prehliadačoch
Webworkers
Dostupné možnosti
<script> loadingu v prehliadačoch
Webworkers

• Potrebuje eval(), kód modulu je string!

• Podpora je ešte slabšia ako pri CORS

• Počas ladenia nesedia čísla riadkov s pôvodným kódom
Dostupné možnosti
<script> loadingu v prehliadačoch
document.write()
Dostupné možnosti
<script> loadingu v prehliadačoch
document.write()

• Nefunguje po načítaní stránky

• document.write() blokuje
Dostupné možnosti
<script> loadingu v prehliadačoch
Máme vôbec nejakú možnosť?
Dostupné možnosti
<script> loadingu v prehliadačoch
ÁNO!
dynamické vkladanie do DOMu
A čo to dôležité issue?
potrebujeme poznať závislosti modulu pred spustením
A čo to dôležité issue?
potrebujeme poznať závislosti modulu pred spustením

obalíme kód modulu volaním predpripravenej funkcie
A čo to dôležité issue?
potrebujeme poznať závislosti modulu pred spustením

obalíme kód modulu volaním predpripravenej funkcie




        vytvorili sme prvý *AMD modul, hey!

                                *asynchronous module definition
Require.JS
Require.JS
Require.JS
 require() - natiahni špecifikované závislosti
a spusti callback, keď je všetko pripravené




                                         *app.js
Require.JS
 require() - natiahni špecifikované závislosti
a spusti callback, keď je všetko pripravené

                        Require.JS ctí
                        “convention over configuration”

                        umiestnenie závislosti je relatívne
                        voči volaniu require()
Require.JS
 define() - zaregistruj argument ako AMD modul,
natiahni špecifikované závislosti
a spusti callback, keď je všetko pripravené
Require.JS
statický hash
Require.JS
modul bez závislostí
Require.JS
pomenovaný modul bez závislostí
Require.JS
modul so závislosťami
Require.JS
pomenovaný modul so závislosťami
Require.JS
pluginy
Require.JS
oslaďte si život kávou
Require.JS
require.config




                *app.js
Require.JS
require.config




                *app.js
Require.JS
require.config




      *types/student.js


                          *app.js
Require.JS
zhrnutie, prečo AMD


• AMD moduly sú flexibilné a async
• fungujú v browseri už teraz, aj bez “zbuildenia”
• podpora pluginov, je možné natiahnuť aj iné typy ako JS
• path aliasy, viac verzií modulu (jquery1.6, jquery1.7)
• jednoznačná viditeľnosť závislostí modulu
• čistý global-namespace, definícia modulu je closure
• podpora veľkých hráčov (jQuery, Dojo, Mootools)
Reqire.JS + Backbone.JS
ako sa kua robí väčšia aplikácia

    Organizujte podľa funkčných celkov
   foldre Models, Views, Controllers sú antipattern



    Modul Application
   deffered initializers, event aggregator



    Optimalizovaný deployment
   výsledný build s pár HTTP rqs
Organizujte podľa funkčných celkov
foldre Models, Views, Controllers sú antipattern
Organizujte podľa funkčných celkov
Organizujte podľa funkčných celkov
Modul Application
deffered initializers




                        *bootstrap.js
Modul Application
deffered initializers



                            *app.js




                        *category.js
Modul Application
event aggregator

Ako na komunikáciu
medzi dvoma views
(funkčnými celkami),
ktoré sú izolované
initializermi?
Modul Application
event aggregator

Ako na komunikáciu
medzi dvoma views
(funkčnými celkami),
ktoré sú izolované
initializermi?

Použijeme inštanciu
app, cez ktorú si
moduly posielajú
správy
Modul Application
event aggregator




                   *category/categoryView.js
Modul Application
event aggregator




                   *category/categoryView.js
Modul Application
event aggregator




                    *predetail/collection.js
Modul Application
event aggregator




                    *predetail/collection.js
Modul Application
event aggregator, PUB-SUB pattern




                     http://blog.responsivenews.co.uk/post/21021136520/how-we-build-our-javascript
Optimalizovaný deployment
výsledný build s pár HTTP rqs
neoptimalizovaná
verzia je priam
hrozivá
Optimalizovaný deployment
výsledný build s pár HTTP rqs
r.js

 • concatenation - build AMD modulov, inlining text!
 • uglifiing - minifikácia js [uglify.js, google compiler (std)]
 • CSS optimizing
Optimalizovaný deployment
výsledný build s pár HTTP rqs
r.js

 • concatenation - build AMD modulov, inlining text!
 • uglifiing - minifikácia js
 • CSS optimizing
*build.js
Optimalizovaný deployment
výsledný build s pár HTTP rqs

 much better :)
Prečo Reqire.JS?
 už musí byť jasné každému


    AMD greatest benefit isn’t being able to load
    scripts on-demand, as some people may think.

    The greatest benefit is the increase of the code
    organization/modularity and also the reduced
    need for globals/namespacing.




http://blog.millermedeiros.com/amd-is-better-for-the-web-than-commonjs-modules/
Zdroje
Javascript
  Prototypes and Inheritance in JavaScript

Require.JS
  adobe.com/.../javascript-architecture-requirejs-dependency-management.html
  requirejs.org/docs/api.html
  github.com/jrburke/r.js
  github.com/requirejs/example-libglobal

Backbone.JS
  lostechies.com/derickbailey/category/backbone/
  addyosmani.github.com/backbone-fundamentals/
  github.com/hautelook/vertebrae
Prečo Javascript?
Prečo Javascript?
THX




      @srigi

Weitere ähnliche Inhalte

Ähnlich wie Require.JS & Backbone.JS

Node.js @ Rubyslava
Node.js @ RubyslavaNode.js @ Rubyslava
Node.js @ RubyslavaIvan Srba
 
Mne to na notebooku funguje
Mne to na notebooku fungujeMne to na notebooku funguje
Mne to na notebooku fungujeJuraj Bednar
 
Výkon webových animácií
Výkon webových animáciíVýkon webových animácií
Výkon webových animáciíblueweb_sk
 
GWT Workshop
GWT WorkshopGWT Workshop
GWT Workshopseges
 
Čo sú to webové aplikácie ?
Čo sú to webové aplikácie ?Čo sú to webové aplikácie ?
Čo sú to webové aplikácie ?Drahoslav Madar
 
Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Jano Suchal
 
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...Catana0605
 
Vývoj pre Google Android
Vývoj pre Google AndroidVývoj pre Google Android
Vývoj pre Google AndroidJuraj Michálek
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Jano Suchal
 
Webové prostredie na výuku refaktorizácii
Webové prostredie na výuku refaktorizáciiWebové prostredie na výuku refaktorizácii
Webové prostredie na výuku refaktorizáciisamxkafejesik
 
qweqweqweqweqweqweqweqweqweqweqweqweqweqwe
qweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqwe
qweqweqweqweqweqweqweqweqweqweqweqweqweqwesamxkafejesik
 
Bezpečnosť v kontexte RIA technológií
Bezpečnosť v kontexte RIA technológiíBezpečnosť v kontexte RIA technológií
Bezpečnosť v kontexte RIA technológiíJuraj Michálek
 
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrumCodecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrumTomas Srnka
 
Úvod do vývoja pre Windows Phone 7 II
Úvod do vývoja pre Windows Phone 7 IIÚvod do vývoja pre Windows Phone 7 II
Úvod do vývoja pre Windows Phone 7 IIIgor Kulman
 
AppMonitor Insight Edition
AppMonitor Insight EditionAppMonitor Insight Edition
AppMonitor Insight EditionAdam Lieskovsky
 
Libraries and tools for C++
Libraries and tools for C++Libraries and tools for C++
Libraries and tools for C++Juraj Michálek
 

Ähnlich wie Require.JS & Backbone.JS (20)

Node.js @ Rubyslava
Node.js @ RubyslavaNode.js @ Rubyslava
Node.js @ Rubyslava
 
Mne to na notebooku funguje
Mne to na notebooku fungujeMne to na notebooku funguje
Mne to na notebooku funguje
 
Výkon webových animácií
Výkon webových animáciíVýkon webových animácií
Výkon webových animácií
 
Academy vol.4
Academy vol.4Academy vol.4
Academy vol.4
 
Academy vol.4
Academy vol.4Academy vol.4
Academy vol.4
 
GWT Workshop
GWT WorkshopGWT Workshop
GWT Workshop
 
Čo sú to webové aplikácie ?
Čo sú to webové aplikácie ?Čo sú to webové aplikácie ?
Čo sú to webové aplikácie ?
 
Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?
 
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...
 
Cv_sk
Cv_skCv_sk
Cv_sk
 
Vývoj pre Google Android
Vývoj pre Google AndroidVývoj pre Google Android
Vývoj pre Google Android
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?
 
Webové prostredie na výuku refaktorizácii
Webové prostredie na výuku refaktorizáciiWebové prostredie na výuku refaktorizácii
Webové prostredie na výuku refaktorizácii
 
qweqweqweqweqweqweqweqweqweqweqweqweqweqwe
qweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqweqwe
qweqweqweqweqweqweqweqweqweqweqweqweqweqwe
 
Bezpečnosť v kontexte RIA technológií
Bezpečnosť v kontexte RIA technológiíBezpečnosť v kontexte RIA technológií
Bezpečnosť v kontexte RIA technológií
 
Apex day 1.0 vicejazycne aplikace lokalizace_kamil schvarcz
Apex day 1.0 vicejazycne aplikace lokalizace_kamil schvarczApex day 1.0 vicejazycne aplikace lokalizace_kamil schvarcz
Apex day 1.0 vicejazycne aplikace lokalizace_kamil schvarcz
 
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrumCodecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
 
Úvod do vývoja pre Windows Phone 7 II
Úvod do vývoja pre Windows Phone 7 IIÚvod do vývoja pre Windows Phone 7 II
Úvod do vývoja pre Windows Phone 7 II
 
AppMonitor Insight Edition
AppMonitor Insight EditionAppMonitor Insight Edition
AppMonitor Insight Edition
 
Libraries and tools for C++
Libraries and tools for C++Libraries and tools for C++
Libraries and tools for C++
 

Require.JS & Backbone.JS

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n