State of the art: server-side javaScript - NantesJS

2 935 vues

Publié le

Publié dans : Technologie
  • Soyez le premier à commenter

State of the art: server-side javaScript - NantesJS

  1. 1. ETAT DE L’ART: SERVER-SIDE JAVASCRIPTAlexandre MorgautWeb Architect & Community Manager - 4D / Wakanda 2012-01-09
  2. 2. HISTOIRE
  3. 3. NAISSANCE Brendan Eich• 1995 JavaScript creator Mocha > LiveScript > JavaScript• 1996 Microsoft JScript (IE4) NetScape Enterprise Server 2 aka LiveWire/iPlanet• 1997 ECMAScript 1 “DHTML” Windows IIS 3
  4. 4. MATURITÉ• 1998 - HTML/XML DOM, Sun/Mozilla Rhino• 1999 - ECMAScript 3, XMLHttpRequest, HTML 4• 2000 - ActionScript, Helma Hop• 2001 - JSON, Apple JavaScript OSA• 2002 - JSLint, Mozilla “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: LE RETOUR• 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: LE RETOUR• 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: LE RETOUR• 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: LE RETOUR• 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. + DE 60 SOLUTIONS EXISTANTES http://en.wikipedia.org/wiki/Comparison_of_server-side_JavaScript_solutions
  10. 10. ÉCOSYSTÈME
  11. 11. COMMUNAUTÉ• Nombreux Groupes d’utilisateurs• Nombreuses Conférences• Nombreux Blogs et livres• Large documentation• Langageaussi utilisé par les développeurs venant d’autres technologies
  12. 12. COMMUNAUTÉ• Nombreux Groupes d’utilisateurs• Nombreuses Conférences• Nombreux Blogs et livres• Large documentation• Langageaussi utilisé par les développeurs venant d’autres technologies
  13. 13. LIBRAIRIES & FRAMEWORKS• JavaScript est le language le plus populaire sur GitHub• Nombreuses librairies• Nombreux frameworkhttps://github.com/languages/JavaScripthttp://javascriptlibraries.com/
  14. 14. ENVIRONNEMENT DE DEVELOPEMENT• Visual Studio• XCode• Eclipse• NetBeans• Wakanda Studio• Cloud9
  15. 15. DÉBOGUEURS• Client-side • Firebug * • Web Inspector * • Dragonfly• Server-side • Wakanda Debugger * • Cloud9 Debugger * * via standard protocols, some debugger can debug JS code running anywhere (server, desktop, mobile, ...)
  16. 16. AUTRES OUTILS ET STANDARDS• JSLint / JSHint / JavaScriptLint• JSON / JSON-Schema / JSON-RPC• JSDoc• HTTP Fox / JSON View• JSMin / Packer / Closure / YUI Compressor / Dojo Shrinksafe• YUI Test / QUnit / Jasmine• NPM
  17. 17. ENGINES
  18. 18. 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”
  19. 19. CLIENT-SIDESpiderMonkey JavaScriptCore Rhino V8 Tamarin Trident / Chakra Carakan / Futhark
  20. 20. SERVER-SIDESpiderMonkey JavaScriptCore Rhino V8 Trident / Chakra
  21. 21. ECMASCRIPT 5 & NEXT• ES5.1 • ES.Next • Mode strict • Typed Array • Object freeze • Modules • Read only properties • Destructuring • Getter / setter • String templates
  22. 22. 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), …
  23. 23. BENCHMARKS and what they worth....
  24. 24. BROWSERS WAR II (MAY 2009)http://www.maximumpc.com/article/features/browser_brouhaha_your_maximum_guide_browsers_today_and_tomorrow?page=0,6
  25. 25. PERSEVERE & JAVASCRIPTDB (APRIL 2009) http://www.sitepen.com/blog/2009/04/20/javascriptdb-perseveres-new-high-performance-storage-engine/
  26. 26. 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
  27. 27. RINGOJS VS NODEJS (SEPTEMBER 2010) http://hns.github.com/2010/09/21/benchmark.html
  28. 28. 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
  29. 29. 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/
  30. 30. MAIN CONCEPTS
  31. 31. COMMON JAVASCRIPT• Working Groups: - CommonJS - WHATWG - W3C - ECMA TC39• L’ubiquité au delà d’ECMAScript• la spécification HTML5 se faisait aussi appeler: “Web Applications 1.0” http://www.whatwg.org/specs/web-apps/current-work/• Asynchronous & Synchronous APIs
  32. 32. 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•But also from - PHP (J2PA), Ruby (Johnson), Perl (JE), …
  33. 33. 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
  34. 34. 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 which could use other cores - multi-thread architectures can run event loops in some of their threads
  35. 35. DATABASE-DRIVEN• Document Store - CouchDB, MongoDB• Key/value Store - Riak• Object Store - Wakanda• Push Store - APE
  36. 36. APIS - PACKAGES
  37. 37. COMMONJS • Modules • Packages • Promises• System • Binary • JSGI• Unit-Testing • File • Stream http://wiki.commonjs.org/wiki/CommonJS
  38. 38. NODE ASYNC APIS• Buffer • Net • Streams• Events • OS • Timers• File • Process • ... http://nodejs.org/docs/v0.5.5/api/
  39. 39. 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
  40. 40. 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
  41. 41. CREDITSThanks for their contributions to Wesley Garland Ondrej Zara

×