Top Banner
End-to-end W3C APIs By Alexandre Morgaut JS.everywhere(2012) Europe
39

End to-end W3C - JS.everywhere(2012) Europe

Aug 29, 2014

Download

Technology

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: End to-end W3C - JS.everywhere(2012) Europe

End-to-endW3C APIsBy Alexandre Morgaut

JS.everywhere(2012) Europe

Page 2: End to-end W3C - JS.everywhere(2012) Europe

Presentation

• Wakanda Community manager

• W3C AC member

• Web Architect

• JS Expert, REST Lover, NoSQL Fanboy

• W3C “jseverywhere“ community group

@amorgaut

Page 3: End to-end W3C - JS.everywhere(2012) Europe

Agenda

• The World Wide Web

• The Standards

• Server-Side JavaScript

•Web Applications

• Now & Tomorrow

Page 4: End to-end W3C - JS.everywhere(2012) Europe

The World Wide Web

Page 5: End to-end W3C - JS.everywhere(2012) Europe

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

Page 6: End to-end W3C - JS.everywhere(2012) Europe

REST

• Representational State Transfer

•Client-Server

• Stateless, Cache, Uniform Interface

• Layered System

•Code on Demand: JavaScript

• defined in 2000 by Roy Thomas Fielding

Page 7: End to-end W3C - JS.everywhere(2012) Europe

Web Standards

Page 8: End to-end W3C - JS.everywhere(2012) Europe

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...

Page 9: End to-end W3C - JS.everywhere(2012) Europe

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...

Page 10: End to-end W3C - JS.everywhere(2012) Europe

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

Page 11: End to-end W3C - JS.everywhere(2012) Europe

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

Page 12: End to-end W3C - JS.everywhere(2012) Europe

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

Page 13: End to-end W3C - JS.everywhere(2012) Europe

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

Page 14: End to-end W3C - JS.everywhere(2012) Europe

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

Page 15: End to-end W3C - JS.everywhere(2012) Europe

Server-Side JavaScript

Page 16: End to-end W3C - JS.everywhere(2012) Europe

Engines

• Mozilla SpiderMonkey

• Mozilla Rhino

• Webkit JavaScriptCore

• Google V8

• Microsoft Chakra

• Opera Carakan

Page 17: End to-end W3C - JS.everywhere(2012) Europe

Standards

• ECMAScript

• CommonJS

Page 18: End to-end W3C - JS.everywhere(2012) Europe

Servers• Microsoft IIS

• Persevere

• Jaxer

• node.js

• Wakanda

• RingoJS

• SilkJS

Page 19: End to-end W3C - JS.everywhere(2012) Europe

NoSQL Databases

• CouchDB

• MongoDB

• Riak

• WakandaDB

• ArangoDB

• OrientDB

Page 20: End to-end W3C - JS.everywhere(2012) Europe

More than 60

Server-Side JavaScript

implementations

Page 21: End to-end W3C - JS.everywhere(2012) Europe

Web Application “1.0”

Page 22: End to-end W3C - JS.everywhere(2012) Europe

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

Page 23: End to-end W3C - JS.everywhere(2012) Europe

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

Page 24: End to-end W3C - JS.everywhere(2012) Europe

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/

Page 25: End to-end W3C - JS.everywhere(2012) Europe

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/

Page 26: End to-end W3C - JS.everywhere(2012) Europe

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?

Page 27: End to-end W3C - JS.everywhere(2012) Europe

Async & Sync

• XMLHttpRequest(method, url, async)

• FileReaderSync()

• requestFileSystemSync()

• openDatabaseSync()

• indexedDBSync.open()

• localStorage.getItem()

Page 28: End to-end W3C - JS.everywhere(2012) Europe

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

Page 29: End to-end W3C - JS.everywhere(2012) Europe

Web Workers

• Dedicated or Shared

• No Window, No Document

• WorkerGlobal, WorkerUtils

• WorkerNavigator, WorkerLocation

• postMessage(), onmessage(), onerror()

• importScripts()

Page 30: End to-end W3C - JS.everywhere(2012) Europe

Concept

• Server JS contexts == Workers

• multi-threaded -> Dedicated Workers

• single threaded EventLoop -> Shared

• Server JS contexts === Remote JS Workers

Page 31: End to-end W3C - JS.everywhere(2012) Europe

Now & Tomorrow

Page 32: End to-end W3C - JS.everywhere(2012) Europe

RingoJS

• W3C

• Web Worker

• CommonJS

• Modules

• System, fs, binary, IO, Unit Test

• Other: console

Page 33: End to-end W3C - JS.everywhere(2012) Europe

SilkJS

• W3C

• XMLHttpRequest

• CommonJS

• Modules

Page 34: End to-end W3C - JS.everywhere(2012) Europe

node.js• W3C via modules

• XMLHttpRequest (node-xmlhttprequest)

• Web Sockets (node-websocket-client)

• DOM (node-o3-fastxml), IndexedDB (perstore)

• CommonJS

• Modules, Packages

• Other: console

Page 35: End to-end W3C - JS.everywhere(2012) Europe

Wakanda• W3C

• XMLHttpRequest, WindowTimer,

• Web Storage, Web Worker,

• File, FileSystem, Blob, ...

• CommonJS

• Modules, System, Unit Test

• Other: console

Page 36: End to-end W3C - JS.everywhere(2012) Europe

Wakanda extensions

• Web Storage

• sessionStorage + user.storage & storage

• Web Workers

• Worker & SharedWorker + SystemWorker

Page 37: End to-end W3C - JS.everywhere(2012) Europe

Server-Side JavaScript Context

CommonJS (module.id, require, ...)

Worker (importScripts, WindowTimer, ...)

Page 38: End to-end W3C - JS.everywhere(2012) Europe

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

Page 39: End to-end W3C - JS.everywhere(2012) Europe

Client and Server JavaScript APIs W3C Community Group

http://www.w3.org/community/jseverywhere/