State of the art: Server-Side JavaScript - dejeuner fulljs

40
STATE OF THE ART SERVER-SIDE JAVASCRIPT Alexandre Morgaut Web Architect & Community Manager - 4D / Wakanda 2011-12-08

Transcript of State of the art: Server-Side JavaScript - dejeuner fulljs

Page 1: State of the art: Server-Side JavaScript - dejeuner fulljs

STATE OF THE ARTSERVER-SIDE JAVASCRIPT

Alexandre MorgautWeb Architect & Community Manager - 4D / Wakanda

2011-12-08

Page 2: State of the art: Server-Side JavaScript - dejeuner fulljs

HISTOIRE

Page 3: State of the art: Server-Side JavaScript - dejeuner fulljs

NAISSANCE

• 1995 Mocha > LiveScript > JavaScript

• 1996 Microsoft JScript (IE4)NetScape Enterprise Server 2aka LiveWire/iPlanet

• 1997 ECMAScript 1“DHTML”Windows IIS 3

Page 4: State of the art: Server-Side JavaScript - dejeuner fulljs

MATURITE

• 1998 - HTML/XML DOM, Sun/Mozilla Rhino

• 1999 - ECMAScript 3, XMLHttpRequest, HTML 4

• 2000 - ActionScript, Helma Hop

• 2001 - JSON, Apple JavaScript OSA

• 2002 - JSLint, “Phoenix” > Firefox

• 2003 - JavaScript Adobe Press, JScript .NET

• 2004 - E4X , “Web 2.0”, JSDB

• 2005 - Prototype.js, “Ajax”

• 2006 - Firebug, jQuery, “Comet”, APE, “HTML5”

• 2007 - SitePoint Persevere, Rhino on Rails

Page 5: State of the art: Server-Side JavaScript - dejeuner fulljs

SSJS: LE COMEBACK

• 2008Aptana Jaxer CouchDBAcid Test 3

• 2009Narwhal & JackServerJS > CommonJS Node.jsv8cgi, GPSEEECMAScript 5

• 2010Helma NG > RingoJSSun Phobos

• 2011WakandaCoffeeScriptECMAScript 5.1

Page 6: State of the art: Server-Side JavaScript - dejeuner fulljs

SSJS: LE COMEBACK

• 2008Aptana Jaxer CouchDBAcid Test 3

• 2009Narwhal & JackServerJS > CommonJS Node.jsv8cgi, GPSEEECMAScript 5

• 2010Helma NG > RingoJSSun Phobos

• 2011WakandaCoffeeScriptECMAScript 5.1

Page 7: State of the art: Server-Side JavaScript - dejeuner fulljs

SSJS: LE COMEBACK

• 2008Aptana Jaxer CouchDBAcid Test 3

• 2009Narwhal & JackServerJS > CommonJS Node.jsv8cgi, GPSEEECMAScript 5

• 2010Helma NG > RingoJSSun Phobos

• 2011WakandaCoffeeScriptECMAScript 5.1

Page 8: State of the art: Server-Side JavaScript - dejeuner fulljs

SSJS: LE COMEBACK

• 2008Aptana Jaxer CouchDBAcid Test 3

• 2009Narwhal & JackServerJS > CommonJS Node.jsv8cgi, GPSEEECMAScript 5

• 2010Helma NG > RingoJSSun Phobos

• 2011WakandaCoffeeScriptECMAScript 5.1

Page 9: State of the art: Server-Side JavaScript - dejeuner fulljs

http://en.wikipedia.org/wiki/Comparison_of_server-side_JavaScript_solutions

60+ EXISTING SOLUTIONS

Page 10: State of the art: Server-Side JavaScript - dejeuner fulljs

ÉCOSYSTÈME

Page 11: State of the art: Server-Side JavaScript - dejeuner fulljs

• Visual Studio

• XCode

• Eclipse

•NetBeans

•Wakanda Studio

• Cloud9

ÉDITEURS DE CODE

Page 12: State of the art: Server-Side JavaScript - dejeuner fulljs

•Nombreux User Groups

•Nombreuses Conférences

• Langage aussi utilisé par les autres développeurs

COMMUNAUTÉ

Page 13: State of the art: Server-Side JavaScript - dejeuner fulljs

•Nombreux User Groups

•Nombreuses Conférences

• Langage aussi utilisé par les autres développeurs

COMMUNAUTÉ

Page 14: State of the art: Server-Side JavaScript - dejeuner fulljs

LIBRAIRIES

• JavaScript est le language le plus populaire sur GitHub

•Nombreuses librairies

•Nombreux framework

https://github.com/languages/JavaScripthttp://javascriptlibraries.com/

Page 15: State of the art: Server-Side JavaScript - dejeuner fulljs

ENGINES

Page 16: State of the art: Server-Side JavaScript - dejeuner fulljs

SpiderMonkey3 JIT Compilers:

TraceMonkey, JägerMonkey, & IonMonkey

V8JIT Compiler : CrankShaft

webkit JavaScriptCore: JSCSquirrelFish Extreme: SFX aka Nitro

(JIT Compiler inside)

Trident: MSHTMLChakra

-> Classic JScript, Managed JScript, & JScript.NET

TamarinJIT Compiler : NanoJIT

-> ActionScript / “ECMAScript 4”

CarakanPreviously: Linear A, Linear B, Futhark

RhinoInterpreted or Compiled execution

CC++

C++Java

C++

C++C++

Page 17: State of the art: Server-Side JavaScript - dejeuner fulljs

CLIENT-SIDE

SpiderMonkey

V8

JavaScriptCore

Trident / ChakraTamarin Carakan / Futhark

Rhino

Page 18: State of the art: Server-Side JavaScript - dejeuner fulljs

SpiderMonkey

V8

JavaScriptCore

Rhino

Trident / Chakra

SERVER-SIDE

Page 19: State of the art: Server-Side JavaScript - dejeuner fulljs

ECMASCRIPT 5 & NEXT

• ES5

•Mode strict

•Object freeze

• Read only properties

• Getter / setter

• ES.Next

• Types Array

•Modules

•Destructuring

• String templates

Page 20: State of the art: Server-Side JavaScript - dejeuner fulljs

EVERYWHERE

-> Widgets/Gadgets : Yahoo Widgets, Microsoft Gadgets, Google Desktop Gadgets, & Dashboards widgets;-> Windows: WSH (Windows Script Host), JScript.Net, Managed JScript, and Windows 8 Metro Applications-> PAC files for automatique proxy sélection;-> Acrobat for interactive PDF forms;-> XUL applications and Jetpack (as Firefox addons);-> Open Office macros;-> QtScript for QT;-> Apple Cocoa (JSCocoa);-> JetC (JavaScript Embedded Toolkit in C) allow to provide embedded application with JavaScript;-> Pronto Philips products (programmable touchscreen remote controls) use ProntoScript based on JS 1.6;-> but also : PHP (J2PA), Apache (mod_js), Ruby (Johnson), Python, Perl (JE), …

Page 21: State of the art: Server-Side JavaScript - dejeuner fulljs

BENCHMARKS

and what they worth....

Page 23: State of the art: Server-Side JavaScript - dejeuner fulljs

PERSEVERE & JAVASCRIPTDB(APRIL 2009)

http://www.sitepen.com/blog/2009/04/20/javascriptdb-perseveres-new-high-performance-storage-engine/

Page 24: State of the art: Server-Side JavaScript - dejeuner fulljs

NODE VS THIN VS NARWHAL(SEPTEMBER 2009)

http://four.livejournal.com/1019177.html

300 concurrent clients

completed requests:thin 36045node 35668narwhal 2921

> summary(node300$ttime) Min. 1st Qu. Median Mean 3rd Qu. Max. 12.0 66.0 112.0 239.4 157.0 12200.0

> summary(thin300$ttime) Min. 1st Qu. Median Mean 3rd Qu. Max. 71.0 84.0 87.0 208.7 107.0 23950.0

> summary(narwhal300$ttime) Min. 1st Qu. Median Mean 3rd Qu. Max. 928 2837 2935 2921 3018 8759

Page 25: State of the art: Server-Side JavaScript - dejeuner fulljs

RINGOJS VS NODEJS(SEPTEMBER 2010)

http://hns.github.com/2010/09/21/benchmark.html

Page 26: State of the art: Server-Side JavaScript - dejeuner fulljs

SPIDERMONKEY

http://www.page.ca/~wes/SpiderMonkey/Perf/sunspider_history.png

1.5 is ~ Firefox 2.0 (and ES-3) 1.7 is ~ Firefox 3.01.8 is ~ Firefox 3.6 1.8.5 + JITs is ~ Firefox 4

Page 27: State of the art: Server-Side JavaScript - dejeuner fulljs

SUNSPIDER 0.9.1(AUGUST 2011)

http://expansive-derivation.ossreleasefeed.com/2011/08/javascript-performance-test-results-with-sunspider/

7

8

6

5

4

3

2

1

Page 28: State of the art: Server-Side JavaScript - dejeuner fulljs

MAIN CONCEPTS

Page 29: State of the art: Server-Side JavaScript - dejeuner fulljs

INTEGRATION-ORIENTED

• Rhino

- Interaction with Java (APIs and objects)

- Helma, Persevere, Narwhal, RingoJS, Sun Phobos...

• JScript .Net

- Interaction with MS .NET (APIs and objects)

- IronJS, Node.NET

Page 30: State of the art: Server-Side JavaScript - dejeuner fulljs

COMMON JAVASCRIPT

• Working Groups: - CommonJS- WHATWG- W3C- ECMA TC39

• L’ubiquité au delà d’ECMAScript

• HTML5 est aussi connu sous le nom de : “Web Applications 1.0”

• Asynchronous & Synchronous APIs

Page 31: State of the art: Server-Side JavaScript - dejeuner fulljs

ASYNC. EVENT-BASED

• Browser Event-Loop on the Server

• An Event Loop in one single thread

• Cooperative («one at a time») with async. callbacks

•Node.js (V8), SpiderNode, RhiNodeII, Node.NET

Node.js like

Page 32: State of the art: Server-Side JavaScript - dejeuner fulljs

SINGLE & MULTI THREADINGOne context per thread

SINGLE

• Low memory usage

• Potentially handle lot of requests

• Cooperative

• Shared context

• Use mostly one core

MULTI

• Vertical scalability (multi-core)

• Thread-safety for concurrent access

• Preemptive: Parallel code execution

• Allow Synchronous APIs

• Uses easily all available cores

Notes: - an event loop can generate some other threads- multi-thread architectures can run event loops in some of their threads

Page 33: State of the art: Server-Side JavaScript - dejeuner fulljs

DATABASE-DRIVEN

• Document Store- CouchDB, MongoDB

• Key/value Store- Riak

• Object Store- Wakanda

• Push Store- APE

Page 34: State of the art: Server-Side JavaScript - dejeuner fulljs

APIS - PACKAGES

Page 35: State of the art: Server-Side JavaScript - dejeuner fulljs

COMMONJS

• System

• Unit-Testing

• Binary

• File

• JSGI

• Stream

http://wiki.commonjs.org/wiki/CommonJS

•Modules • Packages • Promises

Page 36: State of the art: Server-Side JavaScript - dejeuner fulljs

NODE ASYNC APIS

• Buffer

• Events

• File

• Net

• OS

• Process

• Streams

• Timers

• . . .

http://nodejs.org/docs/v0.5.5/api/

Page 37: State of the art: Server-Side JavaScript - dejeuner fulljs

W3C / HTML5 / ES.NEXT& OTHER STANDARDS

• Console

• Blob, Blob URL*

• DataView*

• File / FileSystem

• Modules*

• Progress Events

• Structured clones

• Typed Arrays*

• Web Sockets

• Web Storage, Indexed DB

• Web Workers

• XHR 2

Page 38: State of the art: Server-Side JavaScript - dejeuner fulljs

PACKAGES & MODULES

• github: CommonJS modules in projects (Persevere, Narwhal, RingoJS, ...)

•NPM: Node Package Manager (thousands packages)

•CPM: CommonJS Package Manager (new)

• PINF: Universal module loader

Page 39: State of the art: Server-Side JavaScript - dejeuner fulljs

CREDITS

Thanks for their contributions to

Wesley Garland

Ondrej Zara

Page 40: State of the art: Server-Side JavaScript - dejeuner fulljs

STATE OF THE ART SERVER-SIDE JAVASCRIPT

@amorgaut 4d.com