End-to-end W3C APIs - tpac 2012
-
Upload
alexandre-morgaut -
Category
Technology
-
view
4.275 -
download
4
description
Transcript of End-to-end W3C APIs - tpac 2012
End-to-endW3C APIs
By Alexandre Morgaut
TPAC 2012 - Lyon, France
Agenda
• The Web & JavaScript
• W3C APIs
• Server-Side JavaScript
• Web Applications
• Now & Tomorrow
The Web & JavaScript
REST
• Representational State Transfer
• Client-Server
• Stateless, Cache, Uniform Interface
• Layered System
• Code on Demand: JavaScript
• defined in 2000 by Roy Thomas Fielding
Web Standards
W3C
• Created at the MIT in 1994
• Led by Tim Berners-Lee and Dr. Jeffrey Jaffe
• Joint agreement among three "Host Institutions"
• MIT, ERCIM, Keio University
• Working Groups
• HTML, MathML, RDF, SVG, CSS, Audio, Device...
ECMA• European Computer Manufacturers Association
• Standards
• CD-ROM, ECMAScript, C#, Office Open XML File Formats
• JavaScript
• ECMA-262 aka ECMAScript aka ISO/IEC 16262
• TC39-TG1 managed by Mr. J. Neumann
• E4X: ECMAScript for XML
• ECMAScript Internationalization API
• Test262
http://wiki.ecmascript.org
W3C on Server-Side ?
DOM
• Java
• JavaScript
• .NET
• PHP
• python
• ..;
Server-Side JavaScript
Standards
• ECMAScript
• CommonJS
More than 60 SSJS implementations
Servers
• Microsoft IIS
• Persevere
• Jaxer
• node.js
• Wakanda
• RingoJS
• SilkJS
NoSQL Databases
• CouchDB
• MongoDB
• Riak
• WakandaDB
• ArangoDB
• OrientDB
Web Application “1.0”
HTML5 APIs
• XMLHttpRequest 2
• Blob
• File / FileSystem
• Web SQL
• Web Storage
• Web Workers
• Web Sockets
• Web Cryptography
• ImageData
• Typed Arrays
• Storage Quota
• System Information
• URL
• WebCL
WebCL
“This section proposes mechanisms for transferring pixel data between WebCL memory objects and HTML media elements. Server-side or Web Worker based implementations of WebCL will not be required to support these features.”
https://cvs.khronos.org/svn/repos/registry/trunk/public/webcl/spec/latest/index.html#4
Web SQL
“This document was on the W3C Recommendation track but specification work has stopped. The specification reached an impasse: all interested implementors have used the same SQL backend (Sqlite), but we need multiple independent implementations to proceed along a standardisation path.”
http://www.w3.org/TR/webdatabase/
Async “and” Sync
• XMLHttpRequest(method, url, async)
• FileReaderSync()
• requestFileSystemSync()
• openDatabaseSync()
• indexedDBSync.open()
• localStorage.getItem()
IndexedDB
“The synchronous database API methods provide a blocking access pattern to IndexedDB databases. Since they block the calling thread they are only available from workers.”
http://www.w3.org/TR/IndexedDB/#sync-database
Web Workers
• Dedicated or Shared
• No Window, No Document
• WorkerGlobal, WorkerUtils
• WorkerNavigator, WorkerLocation
• postMessage(), onmessage(), onerror()
• importScripts()
Concept
• Server JS contexts == Workers
• multi-threaded -> Dedicated Workers
• single threaded EventLoop -> Shared
• Server JS contexts === Remote JS Workers
Now & Tomorrow
RingoJS
• W3C
• Web Worker
• CommonJS
• Modules
• System, fs, binary, IO, Unit Test
• Other: console
SilkJS
• W3C
• XMLHttpRequest
• CommonJS
• Modules
node.js
• W3C via modules
• XMLHttpRequest (node-xmlhttprequest)
• Web Sockets (node-websocket-client)
• DOM (node-o3-fastxml), IndexedDB (perstore)
• CommonJS
• Modules, Packages
• Other: console
Wakanda
• W3C
• XMLHttpRequest, WindowTimer,
• Web Storage, Web Worker,
• File, FileSystem, Blob, ...
• CommonJS
• Modules, System, Unit Test
• Other: console
Wakanda
• Web Storage
• sessionStorage, user.storage, storage
• Web Workers
• Worker, SharedWorker, SystemWorker
Wakanda
• Server-side JS context
• CommonJS (module.id, require, ...)
• Worker (importScripts, WindowTimer, ...)
Summary• ECMAScript is already everywhere
• Modules: CommonJS already standard, AMD, ECMAScript 6
• Many W3C APIs already applicable server-side
• Same APIs means
• better learning curve
• more shared libraries / modules
• DRY -> shared Model work Offline
Client and Server JavaScript APIs W3C Community Group
http://www.w3.org/community/jseverywhere/
Let’s start!