Upgrade to Pro — share decks privately, control downloads, hide ads and more …

State of the art: Server Side JavaScript - WebW...

State of the art: Server Side JavaScript - WebWorkersCamp

Alexandre Morgaut

October 08, 2011
Tweet

More Decks by Alexandre Morgaut

Other Decks in Technology

Transcript

  1. BIRTH • 1995 LiveScript/JavaScript • 1996 Microsoft JScript (IE4) NetScape

    Enterprise Server 2 aka LiveWire/iPlanet • 1997 ECMAScript 1 “DHTML” Windows IIS 3
  2. 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
  3. 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
  4. 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
  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. SpiderMonkey TraceMonkey (JIT) JägerMonkey (JIT) IonMonkey (JIT) V8 webkit JavaScriptCore:

    JSC SquirrelFish Extreme: SFX (JIT) Nitro Trident Chakra Tamarin Carakan Futhark Rhino C C++ C++ Java C++ C++ C++
  8. SpiderMonkey Narwhal CouchDB, MongoDB APE, GPSEE, SpiderNode . . .

    V8 JavaScriptCore Narwhal Wakanda Rhino Narwhal Helma / RingoJS, AppJet Persevere, Phobos, RhiNodeII . . . Narwhal Akshell Node.js Trident / Chakra IronJS Node.NET SERVER-SIDE
  9. NODE VS THIN VS NARWHAL (SEPTEMBER 2009) http://four.livejournal.com/1019177.html 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
  10. 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
  11. COMMON JAVASCRIPT • Ubiquity not only for ECMAScript • Server

    missing APIs • Web Applications 1.0 • Asynchronous & Synchronous • Working Groups: - CommonJS - WHATWG - W3C - ECMA TC39
  12. 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
  13. SINGLE vs MULTI THREADING One 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
  14. COMMONJS • Modules • Packages • Promises • System •

    Unit-Testing • Binary • File • JSGI • Stream http://wiki.commonjs.org/wiki/CommonJS
  15. NODE ASYNC APIS • Buffer • Events • File •

    Net • OS • Process • Streams • Timers • . . . http://nodejs.org/docs/v0.5.5/api/
  16. W3C / HTML5 & OTHER STANDARDS • Console • Blob,

    Blob URL* • DataView* • File / FileSystem • Modules* • Progress Events • Structured clones • Typed Arrays* • Web Sockets • Web Storage • Web Workers • XHR 2
  17. 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
  18. STATE OF THE ART SERVER-SIDE JAVASCRIPT The End @amorgaut @thibarg

    @wakanday 4d.com Wakanda.org Wakanday.org See us at Wakanday aka JS.everywhere(Boston, October, 15)