SlideShare a Scribd company logo
1 of 104
Download to read offline
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
inginerie software în contextul JavaScript
Dr. Sabin Corneliu Buraga – profs.info.uaic.ro/~busaco/
Full-Stack Web Development
pics.me.me/story-of-every-project-after-3-months-initial-work-plan-57930917.png
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
“There are two ways to write error-free programs;
only the third one works.”
Alan J. Perlis
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Ce instrumente software și biblioteci JS
pot fi folosite în contextul programării Web?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Editare de cod și dezvoltare de aplicații Web
Depanare
Testare
Documentare a codului
Compresie
Optimizare
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Editoare + medii integrate (IDE):
Ace (Ajax.org Cloud9 Editor), Atom Editor, Brackets,
CodeLite, Komodo, JS Development Tools (Eclipse),
Sublime Text, Visual Studio (Code), WebStorm etc.
a se considera și
github.com/sorrycc/awesome-javascript#editors
instrumente: editare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Disponibile pe Web – în cloud:
Cloud9 IDE, Codepen, JS Bin, JS Fiddle, Plunker, REPL.it,…
unele oferă și partajarea codului-sursă cu alți dezvoltatori
instrumente: editare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Utilizarea consolei JS
obiectul console oferit de mediul de execuție
console.spec.whatwg.org (Living Standard, august 2019)
metode utile: log (), error (), warn (), info (), assert (),
time (), timeEnd (), trace (), group (), groupEnd (),
table (), dir (), dirxml ()
instrumente: depanare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Utilizarea consolei JS
obiectul console oferit de mediul de execuție
la nivel de browser Web
developer.mozilla.org/Web/API/Console
în contextul Node.js: modulul preinstalat console
nodejs.org/api/console.html
instrumente: depanare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente: depanare
de studiat și M. Burgess, Beyond console.log(), 2018
medium.com/@mattburgess/beyond-console-log-2400fdf4a9d8
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Instrumentele de depanare
incluse în navigatoarele Web moderne:
developers.google.com/web/tools/chrome-devtools/
developer.mozilla.org/docs/Tools
docs.microsoft.com/en-us/microsoft-edge/devtools-guide
docs.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium
developer.apple.com/safari/tools/
instrumente: depanare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente: depanare
medium.com/datadriveninvestor/stopping-using-console-log-and-start-using-your-browsers-debugger-62bc893d93ff
inspecție de
variabile
(watch)
domeniu de
vizibilitate
(scope)
puncte de
oprire
(breakpoints)
stiva
apelurilor
(call stack)
puncte de oprire
vizând transferuri
asincrone, DOM,
evenimente,…
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Instrumentele de depanare
disponibile ca proxy
exemple:
HTTP Toolkit – github.com/httptoolkit
mitmproxy – mitmproxy.org
Telerik Fiddler – www.telerik.com/fiddler
instrumente: depanare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Verificarea corectitudinii codului JavaScript
construcția "use strict"; indică interpretorului
că se va utiliza varianta strictă a limbajului
disponibilă începând cu ECMAScript versiunea 5
developer.mozilla.org/Web/JavaScript/Reference/Strict_mode
instrumente: testare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Verificarea corectitudinii codului JavaScript
erorile de programare (e.g., crearea accidentală
a variabilelor globale, nume identice de proprietăți etc.)
vor conduce la emiterea de excepții
instrumente: testare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Verificarea corectitudinii codului JavaScript
sunt interzise diverse facilități:
numere exprimate în baza 8,
folosirea construcțiilor with, arguments.callee
etc.
instrumente: testare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Modul de procesare strict:
modifică semantica programelor
este implicit folosit pentru modulele de cod ES6
module code is always strict mode code
nu este impus de mediul de execuție
instrumente: testare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Verificare statică a codului
JSHint – www.jshint.com
ESLint – eslint.org
JS Inspect (detects copy-pasted & structurally similar code)
github.com/danielstjules/jsinspect
instrumente: testare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente: testare
"use strict";
varAiurea = "Ah!";
const C = 33;
let obiect = {prop: ++C, prop: true}; // eroare de sintaxă
console.error (`{obiect}`);
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente: testare
reguli ESHint
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Suport pentru testare, inclusiv unit testing
exemplificări:
AVA, Cypress, dom-testing-library, Flow, Jasmine, Jest,
Mocha, PhantomJS, Qunit, Sinon.js, Tape, TestCafe etc.
github.com/sorrycc/awesome-javascript#testing-frameworks
de studiat și Let’s Code: Test-Driven JavaScript
www.letscodejavascript.com
instrumente: testare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Testare cross-browser a aplicațiilor Web
exemple:
Browsera – www.browsera.com
Browserling – www.browserling.com
Browser Sandbox – turbo.net/browsers
Browser Shots – browsershots.org
instrumente: testare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Standarde de redactare a codului JavaScript
JavaScript Standard Style
standardjs.com
Code Conventions for JavaScript
www.crockford.com/code.html
Principles of Writing Consistent, Idiomatic JavaScript
github.com/rwaldron/idiomatic.js
instrumente: documentarea codului
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Standarde de redactare a codului JavaScript
ghiduri specifice – câteva exemple:
Airbnb JavaScript Style Guide
github.com/airbnb/javascript
Google JavaScript Style Guide
google.github.io/styleguide/jsguide.html
React Native Code Style
facebook.github.io/react-native/docs/style.html
NPM’s Coding Style
docs.npmjs.com/misc/coding-style.html
instrumente: documentarea codului
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Standarde de redactare a codului JavaScript
instrumente utile (formatatoare a codului-sursă):
JS Beautifier – jsbeautifier.org
Prettier – prettier.io
esformatter – github.com/millermedeiros/esformatter
instrumente: documentarea codului
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
documentarea codului: JSDoc Toolkit – usejsdoc.org
/**
* Class representing a dot.
* @extends Point
*/
class Dot extends Point {
/**
* Create a dot.
* @param {number} x - The x value.
* @param {number} y - The y value.
* @param {number} width - ...
*/
constructor(x, y, width) { // ...
}
/**
* Get the dot's width.
* @return {number} The dot's width.
*/
getWidth() {
// ...
}
}
marcaje (adnotări) speciale
în cadrul comentariilor:
@abstract
@access
@alias
@async
@extends
@class
@interface
@callback
@event
@emits
@listens
@function
@property
@module
@requires
…
@author
@copyright
@license
@summary
@description
@version
@example
@since
@see
@todo
@deprecated
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Instrumente privind compresia/minimizarea
exemple:
JSCompress – github.com/circlecell/jscompress.com
Minify – www.minifier.org
UglifyJS (Mihai Bazon, absolvent FII) – lisperator.net/uglifyjs/
instrumente: compresie de cod
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Transformarea codului JS într-unul optimizat
exemple:
Closure Compiler (Google) – developers.google.com/closure
Prepack (Facebook) – prepack.io
instrumente: optimizare javascript
detalii într-un
curs separat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Managementul de pachete JavaScript
căutare, instalare, compilare, verificare a dependențelor
exemple:
Bower, jspm, npm, Yarn etc.
github.com/sorrycc/awesome-javascript#package-managers
instrumente: pachete
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Managementul de pachete JavaScript
crearea de conglomerate de cod/resurse (bundles)
exemplificări:
browserify, Rollup (specific ES6), webpack
github.com/sorrycc/awesome-javascript#bundlers
instrumente: pachete
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Suport pentru fluxuri de activități (workflow-uri),
eventual realizate automat
exemple:
Brunch, Grunt, Yeoman, Phantom.js, Plop, Selenium
instrumente: fluxuri de activități
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Sisteme de management al machetelor de redare
a conținutului (templating engines)
exemplificări:
Dust.js, EJS, Handlebars, Mustache.js,…
github.com/sorrycc/awesome-javascript#templating-engines
instrumente: machete de redare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Biblioteci pentru programarea funcțională
Lodash – lodash.com
Ramda – ramdajs.com
Underscore – underscorejs.org
resurse de interes la github.com/stoeffel/awesome-fp-js
instrumente: programare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Biblioteci pentru programarea reactivă
vizează procesarea fluxurilor de date asincrone
pe baza paradigmei funcționale
adoptă șablonul de proiectare Observer
www.learnrxjs.io
instrumente: programare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Biblioteci pentru programarea reactivă
exemple:
RxJS – github.com/ReactiveX/rxjs
Cycle – cycle.js.org
MobX – mobx.js.org
Most.js – github.com/cujojs/most
instrumente: programare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Suport pentru creșterea performanței
asm.js (Mozilla, 2012—2014)
subset JavaScript ce poate fi utilizat ca limbaj de nivel
scăzut, eficient – în spiritul limbajului de asamblare
rulează nativ în Chrome, Edge și Firefox
asmjs.org
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Suport pentru creșterea performanței
WebAssembly – wasm (în lucru, 29 octombrie 2019)
limbaj de programare proiectat pentru execuție eficientă
la nivel de (browser) Web
safe, portable, low-level code format
webassembly.org  developer.mozilla.org/WebAssembly
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Suport pentru creșterea performanței
WebAssembly – wasm
include un set restrâns de tipuri de date și operații
permite optimizări la momentul compilării
axat pe realizarea de calcule numerice complexe
uzual, programele wasm sunt organizate în module
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente
studii de caz reale:
P. Jha, S. Padmanabhan, WebAssembly at eBay:
A Real-World Use Case (2019)
tech.ebayinc.com/engineering/webassembly-at-ebay-a-real-world-use-case/
R. Aboukhalilich, How We Used WebAssembly
To Speed Up Our Web App By 20X (2019)
www.smashingmagazine.com/2019/04/webassembly-speed-web-app/
G. Cuvillier, D3WASM: A Port of Doom 3 Engine to
WebAssembly and WebGL (2019)
www.continuation-labs.com/projects/d3wasm/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
C/C++ alte limbaje
cod binar
compilator
JIT (Just-In-Time) / AOT (Ahead-Of-Time)
JS/ES
alte limbaje
wasmasm.js
platformă de execuție (run-time)
navigator Web, server Web, soluție cloud
emscripten
binaryen
aplicație scrisă în limbajul de programare preferat
modul wasmpublicare pe Web a modulului wasm
încărcare asincronă a modulului wasminstanțierea
modulului wasmapelarea funcțiilor furnizate
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrument online:
WebAssembly Playground – ast.run
instrumente
detalii în specificația oficială
webassembly.github.io/spec/core/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Utilizarea unui modul wasm via API-ul JS disponibil
obiecte:
WebAssembly Global Module Instance Memory Table
metodă de instanțiere: instantiateStreaming()
tratarea erorilor: CompileError LinkError RuntimeError
developer.mozilla.org/WebAssembly#API_reference
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
De regulă, un modul wasm nu are acces direct la DOM,
dar codul poate fi partajat de alte programe JS
neinteractive – „lucrători” (Web workers) –
și instanțiat de multiple ori
de evitat transferuri frecvente de date JS↔wasm
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
modulele wasm pot fi executate la nivel de server,
inclusiv „în nori” – Serverless WebAssembly
www.smashingmagazine.com/2019/08/beyond-browser-serverless-webassembly/
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Serverless WebAssembly – exemplificări:
funcții serverless Node.js încărcând module wasm
exploatate pe IBM Cloud Functions ce recurge la
platforma deschisă Apache OpenWhisk
(James Thomas, august 2019)
jamesthom.as/blog/2019/08/06/serverless-and-webassembly-modules/
funcții serverless WebAssembly generate cu Rust și
executate pe platforma Cloudflare Workers
developers.cloudflare.com/workers/templates/boilerplates/rustwasm/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Rularea neautorizată de cod wasm poate conduce la
probleme de securitate:
buffer overflow cauzând XSS (Cross-Site Scripting),
execuție pe server (Server-Side Remote Code Execution),
includere de malware (e.g., cryptocurrency mining) etc.
www.virusbulletin.com/virusbulletin/2018/10/dark-side-webassembly
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Incidente reale vizând WebAssembly:
“over50 %of all sites using WebAssembly apply it for
malicious deeds, such as mining and obfuscation”
M. Musch et al., “New Kid on the Web:
A Study on the Prevalence of WebAssembly in the Wild”, DIMVA 2019
www.tu-braunschweig.de/Medien-DB/ias/pubs/2019-dimva.pdf
R. Neumann & A. Toro, In-browser mining:
Coinhive and WebAssembly (aprilie 2018)
www.forcepoint.com/blog/x-labs/browser-mining-coinhive-and-webassembly
WebKit: Info leak in WebAssembly Compilation (martie 2018)
bugs.chromium.org/p/project-zero/issues/detail?id=1545
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente
resurse de interes:
www.webassemblyman.com
hacks.mozilla.org/category/webassembly/
github.com/mbasso/awesome-wasm
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Alte limbaje – compilate în JS:
CoffeeScript (Jeremy Ashkenas, 2009)
coffeescript.org
dialecte CoffeeScript:
CoffeeScriptRedux – github.com/michaelficarra/CoffeeScriptRedux
LiveScript – livescript.net
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Alte limbaje – compilate în JS:
TypeScript (Microsoft, din 2012)
www.typescriptlang.org
instrumente + resurse:
github.com/dzharii/awesome-typescript
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Alte limbaje – compilate în JS:
TypeScript
a se considera și inițiativa AssemblyScript
(TypeScriptWebAssembly via compilatorul Binaryen):
docs.assemblyscript.org
blog.logrocket.com/the-introductory-guide-to-assemblyscript/
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Portarea altor aplicații în JavaScript
Emscripten – compilator LLVM generând cod JS/wasm
(e.g., programe C sau C++ care se compilează
în WebAssembly, plus cod OpenGL în WebGL)
kripken.github.io/emscripten-site/
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Portarea altor aplicații în JavaScript
JSIL – compilator care transformă codul CIL
(Common Intermediate Language) al aplicațiilor .NET
în programe JavaScript rulând în browser
jsil.org
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Portarea altor aplicații în JavaScript
ClosureScript – ClosureJS: github.com/clojure/clojurescript
PyPy.js – Pythonasm.js: pypyjs.org
Scala.js – compilează programele Scala în cod JS
www.scala-js.org  www.lihaoyi.com/hands-on-scala-js/
PureScript – www.purescript.org
instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
N-am putea recurge la
biblioteci/framework-uri JS specifice?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
colecții de (micro-)biblioteci JS:
www.javascripting.com
jster.net
microjs.com
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Biblioteci JavaScript specializate:
procesarea formularelor Web
facilitarea transferurilor asincrone de date
tehnici criptografice
realizarea de efecte vizuale
generarea de conținut grafic 2D/3D
vizualizarea datelor
dezvoltare de jocuri (e.g., game engines)
…
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Biblioteci/framework-uri populare
conform 2018.stateofjs.com
front-end: React, Vue.js, Angular, Preact, Ember, Polymer
altele: Svelte, Aurelia, Hyperapp, Backbone, Mithril,…
data layer: Redux, GraphQL, Apollo, MobX, Relay (Modern)
altele: VueX, ember-data, NgRx, RxJS etc.
testing: Jest, Mocha, Jasmine, Enzyme, Karma, Storybook
altele: Cypress, QUnit, Tape, Chai, TestCafe, Protractor,…
mobile & desktop: Electron, React Native, Cordova, Ionic
altele: Flutter, Weex, Quasar, Expo etc.
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Biblioteci/framework-uri specializate – exemple:
prelucrare/generare de date în diverse formate:
Js Barcode, jsPDF, JS Xlsx, MathJax, Numeric, Papa Parse,
pdfmake, Psd.js, Qrcodejs, SheetJS, STDlib, Superstruct
baze de date: Alasql, Juggling DB, Knex, Local Forage,
Loki JS, PouchDB, Typeorm, Watermelon Db,…
internaționalizare: Globalize, i18next, Lingui, Polyglot
suport pentru OAuth: hello.js, JSO, Salte Auth
proiectarea interfeței cu utilizatorul: Anypixel, Ant Design,
Ace, Deck.js, Materialized, Reveal,
Styled Components, Semantic UI, Slate etc.
dezvoltare de jocuri: Cannon, Easystar, LiquidFun,
Melon, P2.js, Phaser, Pixi.js, Whitestorm,…
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Biblioteci/framework-uri specializate – exemple:
rețea: Axios, Faye, Request, PeerJS, SockJS, Superagent,…
arhivare: JSZip, LZ String, ZIP.js
prelucrare audio: Howler, Midi.js, SoundManager2, Tone.js
manipulare de imagini: Anypixel, Bonsai, Caman,
Cytoscape, Dagre, Drawingboard, Fabric.js,
MetricsGraphics.js, Nude.js, Paper.js, Plotfly, Processing.js
învățare automată: Clmtrackr, Ml5, TensorFlow.js, TFjs,…
rețele neuronale: Brain.js, Convnet.js, Keras.js, Synaptic
hardware (e.g., roboți, IoT, imprimante 3D):
Cylon, IoTjs, Johnny-five, Maker.js, Ruff.io etc.
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Nu putem adopta diverse șabloane
de proiectare pentru JavaScript?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șabloane de proiectare tradiționale
creaționale
Builder, Prototype, Singleton
structurale
Adapter, Bridge, Decorator, Façade, Flyweight, Proxy
comportamentale
Command, Iterator, Mediator, Observer, State, Visitor
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șabloane de proiectare MV*
MVC (Model-View-Controller)
MVP (Model-View-Presenter)
MVVM (Model View ViewModel)
pentru detalii, de explorat:
Addy Osmani, Learning JavaScript Design Patterns (2017)
www.addyosmani.com/resources/essentialjsdesignpatterns/book/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
flux de activități
într-o aplicație MV*
la nivel de client
(A. Osmani, 2013)
Router
View DOM
Collection
of Models
Data Source
(e.g., DB, API,…)
HTTP Request
DOM
updates
syncs
model
updates
model
events
DOM
events
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șabloane de proiectare MV*
exemplificări de implementări JS:
Dusan Gledovic, Basic JS MVC Implementation (2015)
gist.github.com/gschema/4157554
Camilo Reyes, The MVC Design Pattern
in Vanilla JavaScript (2017)
www.sitepoint.com/mvc-design-pattern-javascript/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șabloane de proiectare MV*
utilizare pragmatică via biblioteci/framework-uri:
Angular – angular.io
Aurelia – aurelia.io
Backbone – backbonejs.org
Backbone Marionette – marionettejs.com
Ember.js – emberjs.com
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Anumite biblioteci/framework-uri pot fi specializate,
tratând doar un anumit aspect al MVC/MVVM
privind dirijarea:
router – github.com/kevindurb/router
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Anumite biblioteci/framework-uri pot fi specializate,
tratând doar un anumit aspect al MVC/MVVM
pentru View – exemple:
Knockout – knockoutjs.com
Preact – preactjs.com
React – reactjs.org
Vue – vuejs.org
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Anumite biblioteci/framework-uri pot fi specializate,
tratând doar un anumit aspect al MVC/MVVM
vizând partea de Model – exemplificări:
BreezeJS – www.getbreezenow.com/breezejs
Immutable – immutable-js.github.io/immutable-js/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șabloane de proiectare specifice
aspect de interes:
modularizarea codului
în cazul JS clasic, specificarea modulelor se poate realiza
via limbajul AMD (Asynchronous Module Definition)
github.com/amdjs/amdjs-api
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șabloane de proiectare specifice
aspect de interes:
modularizarea codului
în cazul JS clasic, specificarea modulelor se poate realiza
via limbajul AMD (Asynchronous Module Definition)
încărcare de cod folosind biblioteci specifice:
curl.js, PINF, RequireJS,…
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șabloane de proiectare specifice
aspect de interes:
modularizarea codului
alternativ, se poate recurge la CommonJS
un format de declarare a modulelor și pachetelor
reutilizabile la nivel de server
wiki.commonjs.org/wiki/CommonJS
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
abordare fără module
(monolitică)
abordare modulară
(pachete + module ES/wasm)
fiecare fragment de cod
este implicit global
pachetele expun interfețe publice
ușor de înțeles
numele (clase, funcții,
constante,…) sunt globale
numele sunt locale pachetului
ce le definește
acces direct la
implementarea efectivă
detaliile de implementare
sunt ascunse
dependența de ordinea încărcării
fișierelor
ordinea încărcării fișierelor
nu are importanță
dependențele de cod
sunt implicite
dependențele de cod
sunt declarate explicit
relații nespecificate
între fișiere & module
fiecare fișier expune
un modul unic
dependențele depind de
contextul rulării
se permite rularea din linia de
comandă (headless browser)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șabloane de proiectare specifice
aspect de interes:
modularizarea codului
pentru alte resurse de interes, a se consulta
Nicolás Bevacqua, Module Design, 2018
ponyfoo.com/articles/module-design
Serg Hospodarets, Native JavaScript modules, 2018
slides.com/malyw/native-js-modules
ES6 modules for Web usage:
github.com/webmodules
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
(în loc de) pauză
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șabloane de proiectare specifice
aspect de interes:
SPA (Single Page Applications)
rescrierea dinamică a conținutului paginii Web
– pe baza transferului asincron al datelor –
în urma interacțiunii cu utilizatorul
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
structura de bază a unei SPA
de studiat Mikito Takada, Single Page Apps in Depth (2017)
singlepageappbook.com
ⵄ DOM
▣ view
▦ model
⧆ template
🛢 storage
☄ events
changes
observes
renders
queries &
writes to
emits
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
write-only DOM
nu sunt preluate date din DOM
managementul stării se face independent de DOM
ⵄ DOM
▣ view
▦ model
⧆ template
🛢 storage
☄ events
changes
observes
renders
queries &
writes to
emits
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
models are the single source of truth
modelele reprezintă toate datele/stările aplicației Web și
sunt păstrate în memorie
ⵄ DOM
▣ view
▦ model
⧆ template
🛢 storage
☄ events
changes
observes
renders
queries &
writes to
emits
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
views observe model changes
view-urile reflectă conținutul modelelor și
primesc notificări de actualizare din partea modelelor
ⵄ DOM
▣ view
▦ model
⧆ template
🛢 storage
☄ events
changes
observes
renders
queries &
writes to
emits
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
decoupled modules that expose small external surfaces
arhitectura aplicației este compusă din
sub-sisteme (module) independente, specializate
pachete expunând o interfață simplă publică
ⵄ DOM
▣ view
▦ model
⧆ template
🛢 storage
☄ events
changes
observes
renders
queries &
writes to
emits
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
minimizing DOM dependent-code
minimizarea și izolarea codului JS
vizând manipularea arborelui DOM
ⵄ DOM
▣ view
▦ model
⧆ template
🛢 storage
☄ events
changes
observes
renders
queries &
writes to
emits
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
la nivel de front-end, fiecare componentă interactivă
(e.g., buton, player, câmp de editare) poate să se afle
într-o anumită stare (isPressed, isPlaying, isTyping,…)
acestă stare nu este neapărat dependentă de back-end
model components
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SPA (Single Page Applications)
problemă:
redarea/împrospătarea eficientă a conținutului
(toate componentele interactive să fie sincronizate)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SPA (Single Page Applications)
problemă:
redarea/împrospătarea eficientă a conținutului
(toate componentele interactive să fie sincronizate)
operațiile de alterare (mutation) a DOM-ului
sunt costisitoare pentru aplicații Web complexe
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SPA (Single Page Applications)
necesitate:
managementul stării globale a aplicației (application state)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SPA (Single Page Applications)
managementul stării aplicației la momentul rulării
URL↔stare
starea curentă a view-ului e dependentă de URL
uzual, de #fragment-identifier
tools.ietf.org/html/rfc3986#section-3.5
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Managementul stării: abordare arhitecturală
Flux (Facebook) – facebook.github.io/flux/
datele sunt procesate via fluxuri unidirecționale
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Managementul stării: biblioteci/framework-uri JS
MobX – simple, scalable state management
mobx.js.org
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Managementul stării: biblioteci/framework-uri JS
Redux – managementul centralizat al stării aplicației
(a predictable state container)
redux.js.org
a se experimenta și Redux Toolkit și React Redux
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Managementul stării: biblioteci/framework-uri JS
Vuex – managementul stării în aplicații create cu Vue.js
(a state management pattern + library for Vue.js)
vuex.vuejs.org
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SPA (Single Page Applications)
definirea unor componente ce ulterior pot fi inițializate

suport pentru reutilizare
aceste componente pot fi încărcate asincron
(eventual, la cerere) via module
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
componente majore ale unei SPA (Patrick Ackerman, 2017)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SPA (Single Page Applications)
uzual, se bazează pe paradigma de
programare (funcțională) reactivă
(FRP – functional reactive programming)
aspecte formale în C. Elliot & P. Hudak,
Functional Reactive Animation, ICFP 1997
conal.net/papers/icfp97/
github.com/conal/talk-2015-essence-and-origins-of-frp
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SPA (Single Page Applications)
programare (funcțională) reactivă
paradigmă declarativă
vizând fluxuri de date prelucrate asincron
(event stream, observable)
a stream  a sequence of ongoing events ordered in time
gist.github.com/staltz/868e7e9bc2a7b8c1f754
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
orice modificare a valorii unei structuri de date ce poate fi
observată (Observable) determină propagarea
unui eveniment ce poate fi tratat asincron (via Promise)
de entitățile ce depind de această structură
www.sitepoint.com/graphql-react-native-getting-started/
synchronous asynchronous
multiplesingle
Generator Observable
PromiseFunction
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SPA (Single Page Applications)
programare (funcțională) reactivă
studii de caz concrete + resurse:
www.infoq.com/reactive-programming/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șabloane de proiectare specifice
aspect de interes:
comunicare prin paradigma publish/subscribe
WebSub (W3C Recommendation, 2018):
www.w3.org/TR/websub/
biblioteci:
AmplifyJS – amplifyjs.com
PubSubJS – github.com/mroderick/PubSubJS
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Asigurarea interacțiunii cu utilizatorul
(eventual, multi-platformă)
Angular
Aurelia
Ember.js
Meteor.js
Mithril
React
Turbine
de explorat și One Page Love – onepagelove.com
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
JavaScript pe platforme multiple
instrumente multi-platformă pentru crearea
de aplicații hibride (Web + native)
Apache Cordova (ex-PhoneGap) – cordova.apache.org
Electron – electronjs.org
Flutter – flutter.dev
Ionic React – ionicframework.com
NativeScript – www.nativescript.org
React Native – facebook.github.io/react-native/
Tabris.js – tabrisjs.com
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
JavaScript pe platforme multiple
framework-uri și biblioteci JavaScript specializate
e.g., interacțiune prin gesturi:
Hammer.js – hammerjs.github.io
iScroll – github.com/cubiq/iscroll
Slideout.js – slideout.js.org
altele la www.javascripting.com/mobile-and-touch/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
JavaScript pe platforme multiple
recurgerea la API-uri JavaScript oferite de platformă
Amazon Fire
developer.amazon.com/apps-and-games/services-and-apis
Microsoft Windows Universal Applications
docs.microsoft.com/en-us/windows/uwp/
Tizen
developer.tizen.org/category/tags/javascript
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Extinderi
JS++ (garantează tipul variabilelor – type guarantees)
www.onux.com/jspp/
Objective-J (modelat după Objective-C,
integrat în framework-ul Cappuccino)
www.cappuccino.dev
PLV8 (extensie JavaScript pentru PostgreSQL)
plv8.github.io
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente
www.codefellows.org/blog/a-list-of-foundational-javascript-tools
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
episodul viitor:
suita de tehnologii HTML5

More Related Content

What's hot

CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScriptCLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScriptSabin Buraga
 
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...Sabin Buraga
 
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţialeCLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţialeSabin Buraga
 
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Sabin Buraga
 
Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga
 
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de cazCLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de cazSabin Buraga
 
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebCLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebSabin Buraga
 
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...Sabin Buraga
 
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScriptSabin Buraga
 
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...Sabin Buraga
 
Cu codul în "nori"
Cu codul în "nori"Cu codul în "nori"
Cu codul în "nori"Sabin Buraga
 
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre serviciiWADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre serviciiSabin Buraga
 
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5Sabin Buraga
 
CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScriptCLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScriptSabin Buraga
 
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...Sabin Buraga
 
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5Sabin Buraga
 
CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5
CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5
CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5Sabin Buraga
 
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...Sabin Buraga
 
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebWeb 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebSabin Buraga
 
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientCLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientSabin Buraga
 

What's hot (20)

CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScriptCLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
 
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
 
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţialeCLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
 
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
 
Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)
 
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de cazCLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
 
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebCLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
 
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
 
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
 
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
 
Cu codul în "nori"
Cu codul în "nori"Cu codul în "nori"
Cu codul în "nori"
 
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre serviciiWADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii
 
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
 
CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScriptCLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
 
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
 
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
 
CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5
CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5
CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5
 
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
 
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebWeb 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
 
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientCLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
 

Similar to STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript

STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSabin Buraga
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSabin Buraga
 
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsWeb 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsSabin Buraga
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSabin Buraga
 
Limbajul JavaScript: o prezentare generală
Limbajul JavaScript: o prezentare generalăLimbajul JavaScript: o prezentare generală
Limbajul JavaScript: o prezentare generalăSabin Buraga
 
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de numeWeb 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de numeSabin Buraga
 
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...Sabin Buraga
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSabin Buraga
 
CLIW 2014—2015 (7/12): Programare în limbajul JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScriptCLIW 2014—2015 (7/12): Programare în limbajul JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScriptSabin Buraga
 
CLIW 2017-2018 (11/12) Programare Web. API-uri JavaScript în contextul HTML5 ...
CLIW 2017-2018 (11/12) Programare Web. API-uri JavaScript în contextul HTML5 ...CLIW 2017-2018 (11/12) Programare Web. API-uri JavaScript în contextul HTML5 ...
CLIW 2017-2018 (11/12) Programare Web. API-uri JavaScript în contextul HTML5 ...Sabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Sabin Buraga
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.Sabin Buraga
 
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de clientCLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de clientSabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...Sabin Buraga
 
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)Sabin Buraga
 
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5Sabin Buraga
 
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...Sabin Buraga
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Sabin Buraga
 
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSTAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSabin Buraga
 
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Sabin Buraga
 

Similar to STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript (20)

STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
 
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsWeb 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.js
 
Limbajul JavaScript: o prezentare generală
Limbajul JavaScript: o prezentare generalăLimbajul JavaScript: o prezentare generală
Limbajul JavaScript: o prezentare generală
 
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de numeWeb 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
 
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului Web
 
CLIW 2014—2015 (7/12): Programare în limbajul JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScriptCLIW 2014—2015 (7/12): Programare în limbajul JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScript
 
CLIW 2017-2018 (11/12) Programare Web. API-uri JavaScript în contextul HTML5 ...
CLIW 2017-2018 (11/12) Programare Web. API-uri JavaScript în contextul HTML5 ...CLIW 2017-2018 (11/12) Programare Web. API-uri JavaScript în contextul HTML5 ...
CLIW 2017-2018 (11/12) Programare Web. API-uri JavaScript în contextul HTML5 ...
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
 
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de clientCLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
 
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
 
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
 
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
 
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSTAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
 
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
 

More from Sabin Buraga

Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleWeb 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleSabin Buraga
 
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Sabin Buraga
 
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelWeb 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelSabin Buraga
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Sabin Buraga
 
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTWeb 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTSabin Buraga
 
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Sabin Buraga
 
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeSabin Buraga
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5Sabin Buraga
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)Sabin Buraga
 
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...Sabin Buraga
 
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesHCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesSabin Buraga
 
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignHCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignSabin Buraga
 
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (5/10) Information Architecture. From Design Patterns to FlowHCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (5/10) Information Architecture. From Design Patterns to FlowSabin Buraga
 
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) InteractionsHCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) InteractionsSabin Buraga
 
HCI 2018 (7/10) HCI Engineering. UI Evaluation. Models
HCI 2018 (7/10) HCI Engineering. UI Evaluation. ModelsHCI 2018 (7/10) HCI Engineering. UI Evaluation. Models
HCI 2018 (7/10) HCI Engineering. UI Evaluation. ModelsSabin Buraga
 

More from Sabin Buraga (15)

Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleWeb 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturale
 
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
 
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelWeb 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
 
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTWeb 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma REST
 
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
 
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
 
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
 
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesHCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
 
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignHCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
 
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (5/10) Information Architecture. From Design Patterns to FlowHCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
 
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) InteractionsHCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
 
HCI 2018 (7/10) HCI Engineering. UI Evaluation. Models
HCI 2018 (7/10) HCI Engineering. UI Evaluation. ModelsHCI 2018 (7/10) HCI Engineering. UI Evaluation. Models
HCI 2018 (7/10) HCI Engineering. UI Evaluation. Models
 

STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript