Contenu connexe Similaire à State of the art: Server-Side JavaScript - WebWorkersCamp IV - Open World Forum 2011 (20) Plus de Alexandre Morgaut (20) State of the art: Server-Side JavaScript - WebWorkersCamp IV - Open World Forum 20111. STATE OF THE ART
SERVER-SIDE JAVASCRIPT
@amorgaut 4d.com
2011-09-24
3. BIRTH
• 1995
LiveScript/JavaScript
• 1996
Microsoft JScript (IE4)
NetScape Enterprise Server 2
aka LiveWire/iPlanet
• 1997
ECMAScript 1
“DHTML”
Windows IIS 3
4. MATURITY
• 1998 - DOM, Mozilla Rhino
• 1999 - ES3, XMLHttpRequest, HTML 4
• 2000 - ActionScript, Helma Hop
• 2001 - JSON, Apple JavaScript OSA
• 2002 - JSLint
• 2003 - JavaScript Adobe Press, JScript .NET
• 2004 - E4X , “Web 2.0”
• 2005 - Prototype, “Ajax”
• 2006 - Firebug, jQuery, “Comet”, APE, “HTML5”
• 2007 - SitePoint Persevere, Rhino on Rails
5. SSJS: THE COMEBACK
• 2008
Aptana Jaxer
CouchDB
Acid Test 3
• 2009
Narwhal & Jack
GPSEE
ServerJS -> CommonJS
Node.js
ECMAScript 5
• 2010
Helma NG -> RingoJS
Sun Phobos
• 2011
Wakanda
6. SSJS: THE COMEBACK
• 2008
Aptana Jaxer
CouchDB
Acid Test 3
• 2009
Narwhal & Jack
GPSEE
ServerJS -> CommonJS
Node.js
ECMAScript 5
• 2010
Helma NG -> RingoJS
Sun Phobos
• 2011
Wakanda
7. SSJS: THE COMEBACK
• 2008
Aptana Jaxer
CouchDB
Acid Test 3
• 2009
Narwhal & Jack
GPSEE
ServerJS -> CommonJS
Node.js
ECMAScript 5
• 2010
Helma NG -> RingoJS
Sun Phobos
• 2011
Wakanda
8. SSJS: THE COMEBACK
• 2008
Aptana Jaxer
CouchDB
Acid Test 3
• 2009
Narwhal & Jack
GPSEE
ServerJS -> CommonJS
Node.js
ECMAScript 5
• 2010
Helma NG -> RingoJS
Sun Phobos
• 2011
Wakanda
11. C C+
+
SpiderMonkey webkit JavaScriptCore: JSC
TraceMonkey (JIT) SquirrelFish Extreme: SFX (JIT)
JägerMonkey (JIT)
IonMonkey (JIT)
Nitro
C+
Jav +
a
Rhino V8
C+
+
Trident
Chakra
C+
+
C+
+ Carakan
Tamarin Futhark
13. SERVER-SIDE
SpiderMonkey JavaScriptCore
Narwhal
Narwhal
CouchDB, MongoDB
Wakanda
APE, GPSEE, SpiderNode
...
V8
Narwhal
Akshell
Node.js
Rhino Trident / Chakra
Narwhal IronJS
Helma / RingoJS, AppJet Node.NET
Persevere, Phobos, RhiNodeII
...
15. BROWSERS WAR II
(MAY 2009)
http://www.maximumpc.com/article/features/browser_brouhaha_your_maximum_guide_browsers_today_and_tomorrow?page=0,6
16. PERSEVERE & JAVASCRIPTDB
(APRIL 2009)
http://www.sitepen.com/blog/2009/04/20/javascriptdb-perseveres-new-high-performance-storage-engine/
17. NODE VS THIN VS NARWHAL
(SEPTEMBER 2009)
300 concurrent clients
completed requests:
thin 36045
node 35668
narwhal 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
http://four.livejournal.com/1019177.html
18. RINGOJS VS NODEJS
(SEPTEMBER 2010)
http://hns.github.com/2010/09/21/benchmark.html
19. SUNSPIDER 0.9.1
(AUGUST 2011)
7
8
6
5
4
3
2
1
http://expansive-derivation.ossreleasefeed.com/2011/08/javascript-performance-test-results-with-sunspider/
21. 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
22. COMMON JAVASCRIPT
• Ubiquity not only for ECMAScript
• Server missing APIs
• Web Applications 1.0
• Asynchronous & Synchronous
• Working Groups:
- CommonJS
- WHATWG
- W3C
- ECMA TC39
23. 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
25. SINGLE vs MULTI THREADING
One context per thread
SINGLE MULTI
• Low memory usage • Vertical scalability (multi-core)
• Potentially handle lot of requests • Thread-safety for concurrent access
• Cooperative • Preemptive: Parallel code execution
• Shared context • Allow Synchronous APIs
• Use mostly one core • Uses easily all available cores
28. COMMONJS
• Modules
• Packages • Binary
• Promises • File
• System • JSGI
• Unit-Testing • Stream
http://wiki.commonjs.org/wiki/CommonJS
29. NODE ASYNC APIS
• Buffer • Process
• Events • Streams
• File • Timers
• Net • ...
• OS
http://nodejs.org/docs/v0.5.5/api/
30. W3C / HTML5
& OTHER STANDARDS
• Console • Structured clones
• Blob, Blob URL* • Typed Arrays*
• DataView* • Web Sockets
• File / FileSystem • Web Storage
• Modules* • Web Workers
• Progress Events • XHR 2
31. PACKAGES & MODULES
• github: CommonJS modules in forks (Persevere, Narwhal, RingoJS, ...)
• NPM: Node Package Manager (3600+ packages)
• CPM: CommonJS Package Manager (new)
• PINF: Universal module loader
http://wiki.commonjs.org/wiki/CommonJS
32. STATE OF THE ART
SERVER-SIDE JAVASCRIPT
The End
See us at Wakanday aka
JS.everywhere(Boston, October, 15)
@amorgaut 4d.com
@thibarg Wakanda.org
@wakanday Wakanday.org