State of the Art     Server-Side JavaScript              2011-12-06@amorgaut                     4d.com
History
Birth•   1995    Mocha > LiveScript > JavaScript•   1996    Microsoft JScript (IE4)    NetScape Enterprise Server 2    aka...
Maturity•   1998 - HTML/XML DOM, Sun/Mozilla Rhino•   1999 - ECMAScript 3, XMLHttpRequest, HTML 4•   2000 - ActionScript, ...
SSJS: The comeback•   2008    Aptana Jaxer    CouchDB    Acid Test 3•   2009    Narwhal & Jack    ServerJS > CommonJS    N...
SSJS: The comeback•   2008    Aptana Jaxer    CouchDB    Acid Test 3•   2009    Narwhal & Jack    ServerJS > CommonJS    N...
SSJS: The comeback•   2008    Aptana Jaxer    CouchDB    Acid Test 3•   2009    Narwhal & Jack    ServerJS > CommonJS    N...
SSJS: The comeback•   2008    Aptana Jaxer    CouchDB    Acid Test 3•   2009    Narwhal & Jack    ServerJS > CommonJS    N...
60+ existing solutionshttp://en.wikipedia.org/wiki/Comparison_of_server-side_JavaScript_solutions
Engines
C+                                                                                                                        ...
CLIENT-SIDESpiderMonkey             JavaScriptCore    Rhino                      V8 Tamarin    Trident / Chakra   Carakan ...
SERVER-SIDESpiderMonkey                                       JavaScriptCore         Narwhal,                             ...
Benchmarks and what they worth....
Browsers War II                                           (MAY 2009)http://www.maximumpc.com/article/features/browser_brou...
Persevere & JavaScriptDB                                    (April 2009) http://www.sitepen.com/blog/2009/04/20/javascript...
Node vs Thin vs Narwhal      (September 2009)                                300 concurrent clients                       ...
RingoJS vs NodeJS   (September 2010)   http://hns.github.com/2010/09/21/benchmark.html
Spidermonkey                                                            1.5 is ~ Firefox 2.0 (and ES-3)                   ...
Sunspider 0.9.1                                  (August 2011)         7         8         6         5         4         3...
Main Concepts
Integration-Oriented•   Rhino    - Interaction with Java (APIs and objects)    - Helma, Persevere, Narwhal, RingoJS, Sun P...
Common JavaScript• Working Groups:  -   CommonJS  -   WHATWG  -   W3C  -   ECMA TC39• Ubiquity not only for ECMAScript• HT...
Async. Event-based                            Node.js like•   Browser Event-Loop on the Server•   An Event Loop in one sin...
Single & multi threading                                   One context per threadSINGLE                                   ...
Database-driven• Document Store -   CouchDB, MongoDB• Key/value Store -   Riak• Object Store -   Wakanda• Push Store -   APE
APIs - Packages
CommonJSModules                  Packages                      Promises     •    System                     •   File     •...
Node           Async APIs•   Buffer                            •   Process•   Events                            •   Stream...
W3C / HTML5 / ES.Next  & other standards•   Console             •   Structured clones•   Blob, Blob URL*     •   Typed Arr...
Packages & Modules•   github: CommonJS modules in projects    (Persevere, Narwhal, RingoJS, ...)•   NPM: Node Package Mana...
State of the Art      Server-Side JavaScript                     The End            or... the beginning....@amorgaut      ...
Upcoming SlideShare
Loading in …5
×

State of the art: Server-side JavaScript - MoscowJS

3,157 views
3,001 views

Published on

Published in: Technology, Design
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,157
On SlideShare
0
From Embeds
0
Number of Embeds
929
Actions
Shares
0
Downloads
24
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • When we started to define the Wakanda project, we did a lot of research and tests before concluding what would be the best language for it on the server and with which engine. We then decided to share with the others what we knew and what we learned. And here come this presentation.\n
  • \n
  • Brendan Eich creates JavaScript for NetScape.\n1 year after, he puts it on the server.\nEach time Microsoft followed just one year after.\nThe Server-Side JavaScript is 15 years old.\nBackend developers were not much convinced and mostly choose to ignore it.\n
  • JavaScript long growing maturity.\nMozilla Rhino and Microsoft IIS were the only ones running JavaScript/JScript on the server.\nJavaScript finally had respected standards, development tools, libraries, frameworks, performances.\n\n
  • Aptana was well respected for its support of JavaScript and JS frameworks in its Studio.\nWhen they tried to launch their Cloud solution with JS on the server via Jaxer, lot of JS experts were enthusiastic. John Resig immediately shared its own experiences on its blog.\nIn 2008, first presentation of Wakanda at The Ajax Experience ;-)\nA group called ServerJS were created from the Mozilla Developper Tools community with Kevin Dangoor.\nIt became more independent and choose to be renamed CommonJS to create standard server-side & client-side JS APIs.\nNode.js proposed an Async Event-Loop model on the server via the Google V8 JS engine. V8 had good reputation, and the concept looked quite revolutionary to JS developers.\nThe Long time running Helma choose to rename Helma NG for a new brand: RingoJS\n
  • Aptana was well respected for its support of JavaScript and JS frameworks in its Studio.\nWhen they tried to launch their Cloud solution with JS on the server via Jaxer, lot of JS experts were enthusiastic. John Resig immediately shared its own experiences on its blog.\nIn 2008, first presentation of Wakanda at The Ajax Experience ;-)\nA group called ServerJS were created from the Mozilla Developper Tools community with Kevin Dangoor.\nIt became more independent and choose to be renamed CommonJS to create standard server-side & client-side JS APIs.\nNode.js proposed an Async Event-Loop model on the server via the Google V8 JS engine. V8 had good reputation, and the concept looked quite revolutionary to JS developers.\nThe Long time running Helma choose to rename Helma NG for a new brand: RingoJS\n
  • Aptana was well respected for its support of JavaScript and JS frameworks in its Studio.\nWhen they tried to launch their Cloud solution with JS on the server via Jaxer, lot of JS experts were enthusiastic. John Resig immediately shared its own experiences on its blog.\nIn 2008, first presentation of Wakanda at The Ajax Experience ;-)\nA group called ServerJS were created from the Mozilla Developper Tools community with Kevin Dangoor.\nIt became more independent and choose to be renamed CommonJS to create standard server-side & client-side JS APIs.\nNode.js proposed an Async Event-Loop model on the server via the Google V8 JS engine. V8 had good reputation, and the concept looked quite revolutionary to JS developers.\nThe Long time running Helma choose to rename Helma NG for a new brand: RingoJS\n
  • \n
  • \n
  • Spidermonkey now looks more C++ now but its API are still in C\nComplex Webkit naming\nTrident: Windows only\n
  • \n
  • SpiderMonkey: Narwhal, CouchDB, MongoDB, JSDB, APE, GPSEE, SpiderNode, ...\nJavaScriptCore: Narwhal, Wakanda\nV8: Narwhal, v8cgi, Akshell, Node.js\nRhino: Narwhal, Helma / RingoJS, AppJet, Persevere, Phobos, RhinodeII, ...\nTrident / Chackra: ASP, WSH, .NET, IronJS, Node.NET\n
  • \n
  • The growth of WebApps with Ajax Frameworks requires more powerful engines \n-> Browsers War II.\n
  • COmparing js with other technologies. Here, persevere is the best.\n
  • Who understood those stats ? ;-)\n
  • Benchmark results depends on use cases and context\n
  • \n
  • The core engines running on the server have finally reach acceptable performances, with quite comparable results.\nThey all actively continue their own performance enhancement.\nECMAScript 5 in strict mode also help to provide better internal optimizations.\n \n
  • \n
  • These solutions were mostly the ones which made JavaScript survive on the server\nAll missing stuff were covered by the environment in which they are running.\nIt’s then easy to make it’s application platform dependent which often what front-end JavaScript developers want to prevent.\n-> so then came the work on standards for the “missing stuff” ;-)\n
  • “JavaScript” is available in all modern mobile phones, tablets, Internet box, and even some remote control and TVs.\n- It is quite everywhere, but, back on the server, the JS engines only provide the Core of the language, mostly as defined by ECMAScript with ongoing features. \n- Ajax, Web 2.0, & HTML5 provided a very large & active open source community (first community on Github)\n- At least 4 important Working Groups are doing their best to make it better and better.\n- Common JavaScript oriented implementations want to enhance interoperability between each of them, hopefully more quickly than how it came on client-side.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \nNPM: Author ?\nCPM: by Kris Zyp\nPINF: by Christoph Dorn\n
  • \n
  • State of the art: Server-side JavaScript - MoscowJS

    1. 1. State of the Art Server-Side JavaScript 2011-12-06@amorgaut 4d.com
    2. 2. History
    3. 3. Birth• 1995 Mocha > LiveScript > JavaScript• 1996 Microsoft JScript (IE4) NetScape Enterprise Server 2 aka LiveWire/iPlanet• 1997 ECMAScript 1 “DHTML” Windows IIS 3
    4. 4. Maturity• 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
    5. 5. SSJS: The comeback• 2008 Aptana Jaxer CouchDB Acid Test 3• 2009 Narwhal & Jack ServerJS > CommonJS Node.js v8cgi, GPSEE ECMAScript 5• 2010 Helma NG > RingoJS Sun Phobos• 2011 Wakanda CoffeeScript ECMAScript 5.1
    6. 6. SSJS: The comeback• 2008 Aptana Jaxer CouchDB Acid Test 3• 2009 Narwhal & Jack ServerJS > CommonJS Node.js v8cgi, GPSEE ECMAScript 5• 2010 Helma NG > RingoJS Sun Phobos• 2011 Wakanda CoffeeScript ECMAScript 5.1
    7. 7. SSJS: The comeback• 2008 Aptana Jaxer CouchDB Acid Test 3• 2009 Narwhal & Jack ServerJS > CommonJS Node.js v8cgi, GPSEE ECMAScript 5• 2010 Helma NG > RingoJS Sun Phobos• 2011 Wakanda CoffeeScript ECMAScript 5.1
    8. 8. SSJS: The comeback• 2008 Aptana Jaxer CouchDB Acid Test 3• 2009 Narwhal & Jack ServerJS > CommonJS Node.js v8cgi, GPSEE ECMAScript 5• 2010 Helma NG > RingoJS Sun Phobos• 2011 Wakanda CoffeeScript ECMAScript 5.1
    9. 9. 60+ existing solutionshttp://en.wikipedia.org/wiki/Comparison_of_server-side_JavaScript_solutions
    10. 10. Engines
    11. 11. C+ + C SpiderMonkey webkit JavaScriptCore: JSC 3 JIT Compilers: SquirrelFish Extreme: SFX aka NitroTraceMonkey, JägerMonkey, & IonMonkey (JIT Compiler inside) Jav C+ a + Rhino V8 Interpreted or Compiled execution JIT Compiler: CrankShaft C+ + Trident: MSHTML Chakra -> Classic JScript, Managed JScript, & JScript.NET C+ C+ + + Tamarin Carakan JIT Compiler: NanoJIT Previously: Linear A, Linear B, Futhark -> ActionScript / “ECMAScript 4”
    12. 12. CLIENT-SIDESpiderMonkey JavaScriptCore Rhino V8 Tamarin Trident / Chakra Carakan / Futhark
    13. 13. SERVER-SIDESpiderMonkey JavaScriptCore Narwhal, Narwhal, CouchDB, MongoDB, JSDB, Wakanda APE, GPSEE, SpiderNode ... Rhino V8 Narwhal, Narwhal, Helma / RingoJS, AppJet, v8cgi, Akshell Persevere, Phobos, RhiNodeII Node.js ... Trident / Chakra IronJS, Node.NET JScript.NET
    14. 14. Benchmarks and what they worth....
    15. 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. 16. Persevere & JavaScriptDB (April 2009) http://www.sitepen.com/blog/2009/04/20/javascriptdb-perseveres-new-high-performance-storage-engine/
    17. 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. 18. RingoJS vs NodeJS (September 2010) http://hns.github.com/2010/09/21/benchmark.html
    19. 19. Spidermonkey 1.5 is ~ Firefox 2.0 (and ES-3) 1.7 is ~ Firefox 3.0 1.8 is ~ Firefox 3.6 1.8.5 + JITs is ~ Firefox 4http://www.page.ca/~wes/SpiderMonkey/Perf/sunspider_history.png
    20. 20. Sunspider 0.9.1 (August 2011) 7 8 6 5 4 3 2 1http://expansive-derivation.ossreleasefeed.com/2011/08/javascript-performance-test-results-with-sunspider/
    21. 21. Main Concepts
    22. 22. 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
    23. 23. Common JavaScript• Working Groups: - CommonJS - WHATWG - W3C - ECMA TC39• Ubiquity not only for ECMAScript• HTML5 is also known as: “Web Applications 1.0”• Asynchronous & Synchronous APIs
    24. 24. Async. Event-based Node.js like• 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. 25. Single & multi threading One context per threadSINGLE 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 Notes: - an event loop can generate some other threads - multi-thread architectures can run event loops in some of their threads
    26. 26. Database-driven• Document Store - CouchDB, MongoDB• Key/value Store - Riak• Object Store - Wakanda• Push Store - APE
    27. 27. APIs - Packages
    28. 28. CommonJSModules Packages Promises • System • File • Unit-Testing • JSGI • Binary • Stream http://wiki.commonjs.org/wiki/CommonJS
    29. 29. Node Async APIs• Buffer • Process• Events • Streams• File • Timers• Net • ...• OS http://nodejs.org/docs/v0.5.5/api/
    30. 30. W3C / HTML5 / ES.Next & other standards• Console • Structured clones• Blob, Blob URL* • Typed Arrays*• DataView* • Web Sockets• File / FileSystem • Web Storage, Indexed DB• Modules* • Web Workers• Progress Events • XHR 2
    31. 31. 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
    32. 32. State of the Art Server-Side JavaScript The End or... the beginning....@amorgaut 4d.com@thibarg Wakanda.org@wakanday Wakanday.org Thanks to the CommonJS community

    ×