State of the art: Server-Side JavaScript - dejeuner fulljs
-
Upload
alexandre-morgaut -
Category
Technology
-
view
1.986 -
download
3
Transcript of 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
HISTOIRE
NAISSANCE
• 1995 Mocha > LiveScript > JavaScript
• 1996 Microsoft JScript (IE4)NetScape Enterprise Server 2aka LiveWire/iPlanet
• 1997 ECMAScript 1“DHTML”Windows IIS 3
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
SSJS: LE COMEBACK
• 2008Aptana Jaxer CouchDBAcid Test 3
• 2009Narwhal & JackServerJS > CommonJS Node.jsv8cgi, GPSEEECMAScript 5
• 2010Helma NG > RingoJSSun Phobos
• 2011WakandaCoffeeScriptECMAScript 5.1
SSJS: LE COMEBACK
• 2008Aptana Jaxer CouchDBAcid Test 3
• 2009Narwhal & JackServerJS > CommonJS Node.jsv8cgi, GPSEEECMAScript 5
• 2010Helma NG > RingoJSSun Phobos
• 2011WakandaCoffeeScriptECMAScript 5.1
SSJS: LE COMEBACK
• 2008Aptana Jaxer CouchDBAcid Test 3
• 2009Narwhal & JackServerJS > CommonJS Node.jsv8cgi, GPSEEECMAScript 5
• 2010Helma NG > RingoJSSun Phobos
• 2011WakandaCoffeeScriptECMAScript 5.1
SSJS: LE COMEBACK
• 2008Aptana Jaxer CouchDBAcid Test 3
• 2009Narwhal & JackServerJS > CommonJS Node.jsv8cgi, GPSEEECMAScript 5
• 2010Helma NG > RingoJSSun Phobos
• 2011WakandaCoffeeScriptECMAScript 5.1
http://en.wikipedia.org/wiki/Comparison_of_server-side_JavaScript_solutions
60+ EXISTING SOLUTIONS
ÉCOSYSTÈME
• Visual Studio
• XCode
• Eclipse
•NetBeans
•Wakanda Studio
• Cloud9
ÉDITEURS DE CODE
•Nombreux User Groups
•Nombreuses Conférences
• Langage aussi utilisé par les autres développeurs
COMMUNAUTÉ
•Nombreux User Groups
•Nombreuses Conférences
• Langage aussi utilisé par les autres développeurs
COMMUNAUTÉ
LIBRAIRIES
• JavaScript est le language le plus populaire sur GitHub
•Nombreuses librairies
•Nombreux framework
https://github.com/languages/JavaScripthttp://javascriptlibraries.com/
ENGINES
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++
CLIENT-SIDE
SpiderMonkey
V8
JavaScriptCore
Trident / ChakraTamarin Carakan / Futhark
Rhino
SpiderMonkey
V8
JavaScriptCore
Rhino
Trident / Chakra
SERVER-SIDE
ECMASCRIPT 5 & NEXT
• ES5
•Mode strict
•Object freeze
• Read only properties
• Getter / setter
• ES.Next
• Types Array
•Modules
•Destructuring
• String templates
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), …
BENCHMARKS
and what they worth....
BROWSERS WAR II(MAY 2009)
http://www.maximumpc.com/article/features/browser_brouhaha_your_maximum_guide_browsers_today_and_tomorrow?page=0,6
PERSEVERE & JAVASCRIPTDB(APRIL 2009)
http://www.sitepen.com/blog/2009/04/20/javascriptdb-perseveres-new-high-performance-storage-engine/
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
RINGOJS VS NODEJS(SEPTEMBER 2010)
http://hns.github.com/2010/09/21/benchmark.html
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
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
MAIN CONCEPTS
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
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
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
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
DATABASE-DRIVEN
• Document Store- CouchDB, MongoDB
• Key/value Store- Riak
• Object Store- Wakanda
• Push Store- APE
APIS - PACKAGES
COMMONJS
• System
• Unit-Testing
• Binary
• File
• JSGI
• Stream
http://wiki.commonjs.org/wiki/CommonJS
•Modules • Packages • Promises
NODE ASYNC APIS
• Buffer
• Events
• File
• Net
• OS
• Process
• Streams
• Timers
• . . .
http://nodejs.org/docs/v0.5.5/api/
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
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
CREDITS
Thanks for their contributions to
Wesley Garland
Ondrej Zara
STATE OF THE ART SERVER-SIDE JAVASCRIPT
@amorgaut 4d.com