Üheleherakendus

**Üheleherakendus** on veebirakendus või veebisait, mis suhtlusel kasutajaga kirjutab käesoleva veebilehe dünaamiliselt üle, selle asemel et serverist tervet uut lehte alla laadida. See tähendab, et rakendust saab käitada täielikult klientarvuti veebibrauseris, luues sujuvama kasutajakogemuse ilma katkestusteta eri lehtede vahel. Nii jääb mulje, et rakendus töötab nagu töölauaprogramm, kuna kogu informatsioon laaditakse alla esimese korraga või dünaamiliselt vastuseks kasutaja tegevustele ning lisatakse vajaduse järgi lehele. Selline veebileht ei laadi ennast kasutussessiooni jooksul kordagi uuesti ega suuna kontrolli edasi uuele lehele, kuigi eri tööriistadega, näiteks HTML5 History API, võib tekkida mulje, et laaditakse uusi lehti juurde või navigeeritakse teistele lehtedele. Üheleherakendust kasutades toimub tihtipeale taustal dünaamiline suhtlus veebiserveriga. Seda tüüpi rakenduse loomiseks kasutatakse tavaliselt HTMLi, JavaScripti ja CSSi.

## Ajalugu
Termini "üheleherakendus" (*single-page application*) päritolu pole kindel, kuigi ideed ennast on arutatud vähemalt aastast 2003. Aprillis 2002 kirjutas Stuart Morris vabaltseisva veebilehe (*self-contained website*) aadressil slashdotslash.com, mis täitis samu eesmärke ja põhimõtteid nagu üheleherakendus. Hiljem samal aastal kirjeldasid Lucas Birdeau, Kevin Hakman, Michael Peachey ja Evan Yeh üheleherakenduse implementatsiooni Ameerika Ühendriikide patendis 8,136,109.

Üheleherakenduse idee tugineb asjaolule, et veebibrauserites saab kasutada JavaScripti nii kasutajaliidese kuvamiseks, rakenduse loogika käitamiseks kui ka suhtluseks veebiserveriga. Olemas on ka valmisjärgus avatud lähtekoodiga teegid, mis pakuvad üheleherakenduste arendajatele valmis koodipõhju, vähendades sedasi käsitsi kirjutatava JavaScripti mahtu.

## Tehnikad
Selleks, et tagada brauseri käitumine, kus veebilehte ei vahetata ka serveriga suhtlemisel, on mitu võimalust.

### Javascripti raamistikud
Enamik veebibrauseritele mõeldud JavaScripti raamistikke järgivad juba vaikimisi üheleherakenduste põhimõtteid.
* AngularJS on täielikult kliendipoolne raamistik, mille mallifunktsionaalsus seisneb kahesuunalises kasutajaliidese andmete sidumises, mis omakorda võimaldab staatilise veebilehe sisu dünaamiliselt uuendada ilma serveri sekkumiseta.
* Knockout.js on kliendipoolne raamistik, mille mallid põhinevad MVVM-i (*[[model-view-viewmodel]]*) disainimustril. Selleks kasutatakse samuti andmete sidumist, kusjuures mustri VM-i (*viewmodel*) komponent on just mõeldud selleks, et keerulisemad programmilised objektid dünaamiliselt vaadeteks konverteerida.
* Aurelia on JavaScripti kliendiraamistik, mis sobib nii mobiili-, töölaua- kui ka veebirakenduste arenduseks. Aurelia sarnaneb kasutuselt AngularJSile, kuid on sellega võrreldes uuem, modulaarsem ning rangemalt standardiseeritud. 
* Vue.js (ka Vue) on kasutajaliideste ehitamiseks mõeldud avatud lähtekoodiga progressiivne raamistik. 
*React (lubatud ka kirjapildid React.js ja ReactJS) on samuti kasutajaliidestele mõeldud raamistik, mille korrashoiu eest vastutavad Facebook, Instagram ning iseseisvatest arendajatest ja korporatsioonidest koosnev kogukond. React eeldab omaette programmeerimiskeele kasutust, mis on sisuliselt JavaScripti ja HTMLi segu.

### Ajax
Ajax on tuntuim tehnika üheleherakenduste arenduses. Peamiselt kasutatakse Ajaxi implementatsioonides JavaScripti XMLHttpRequesti objektiklassi, osadel juhtudel koos HTML-elementidega Iframe ja Script. Ajaxi levikut on eriti edendanud populaarsed teegid nagu jQuery, mis ühtlustavad Ajaxi käitumist eri veebibrauserites. 

### WebSockets
WebSockets on osa HTML5 spetsifikatsioonist, mis kirjeldab kahesuunalist reaalajas olekuga kliendi-serveri suhtluse tehnoloogiat. WebSocketsi tehnoloogia ületab Ajaxit jõudluselt ja lihtsuselt.

## Viited