end to-end w3c - js.everywhere(2012) europe
DESCRIPTION
TRANSCRIPT
End-to-endW3C APIsBy Alexandre Morgaut
JS.everywhere(2012) Europe
Presentation
• Wakanda Community manager
• W3C AC member
• Web Architect
• JS Expert, REST Lover, NoSQL Fanboy
• W3C “jseverywhere“ community group
@amorgaut
Agenda
• The World Wide Web
• The Standards
• Server-Side JavaScript
•Web Applications
• Now & Tomorrow
The World Wide Web
The Web
•WWW: WorldWideWeb(aka “Hypertext Project”)
•UDI: Uniform Document Identifier
•HTML: Hypertext Markup Language
•HTTP: Hypertext Transfer Protocol
• created in 1989 by Tim Berners-Lee
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...
IANA• Internet Assigned Numbers Authority
• created by Jon Postel and Joyce K. Reynolds
• department of ICANN (Internet Corporation for Assigned Names and Numbers)
• manages
• Domain Names, IP Addresses, Protocol registries
• MIME Media Types
• application, text, image, multipart...
IETF
• Internet Engineering Task Force
• organized activity of the Internet Society (ISOC)
• cooperates with W3C & ISO/IEC
• manages the RFCs (Request For Comments)
• DNS, FTP, HTTP, SMTP, Zlib, Cookie, Atom
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
WaSP• Web Standards Project
• founded in 1998 by Georges Olsen, Glenn Davis, & Jeffrey Zeldman
• convinced in 2001 Microsoft, Netscape, Opera & other browsers to support HTML 4.01, XHTML 1.0, CSS1, and ECMAScript
• AcidTests (by Ian Hickson)
• 1: HTML 4 & CSS 1
• 2: CSS 1 & CSS 2
• 3: HTML 4, XHTML 1.0, CSS 2.1, DOM 2, ECMAScript 3.1
• Today last versions of all major Browsers 100% compliant
WHATWG• Web Hypertext Application Technology Working Group
• founded in 2004 by individuals from Apple, the Mozilla & Opera
• Led by Ian Hickson
• Created to work on HTML5 based on Web Apps 1.0 + Web Forms 2.0 while the W3C choose to concentrate on XHTML
• HTML being a living standard (no more versions)
• Proposed
• Web Workers, Web Storage, Web Sockets, ...
• New W3C working group created in 2007 to work on HTML5
• WHATWG & W3C editions of HTML5 can have some differences
CommonJS• created in 2009 by Kevin Dangoor as ServerJS on Mozilla Wiki
• standards for JavaScript on the server
• Narwhal, Helma NG, v8CGI, GPSEE, chiron, Persevere
• Renamed CommonJS
• command line tools, desktop, addon, or browser implementations
• joined by CouchDB, Wakanda, Sproutcore, node.js, RequireJS...
• Modules, Packages, and Promises
• Binary, FileSystem, System, I/O stream, Socket I/O
• Browser like APIs: worker, console, HTTP client
Server-Side JavaScript
Engines
• Mozilla SpiderMonkey
• Mozilla Rhino
• Webkit JavaScriptCore
• Google V8
• Microsoft Chakra
• Opera Carakan
Standards
• ECMAScript
• CommonJS
Servers• Microsoft IIS
• Persevere
• Jaxer
• node.js
• Wakanda
• RingoJS
• SilkJS
NoSQL Databases
• CouchDB
• MongoDB
• Riak
• WakandaDB
• ArangoDB
• OrientDB
More than 60
Server-Side JavaScript
implementations
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/
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/
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/
Should we define a JSDBC API?
Async & 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 extensions
• Web Storage
• sessionStorage + user.storage & storage
• Web Workers
• Worker & SharedWorker + SystemWorker
Server-Side JavaScript 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/