SlideShare ist ein Scribd-Unternehmen logo
1 von 41
The Future of Javascript
by Samir ROUABHI (rouabhi@gmail.com)
Algiers Developer Meetup
October 3rd, 2015
Aux origines du web..
était le browser
V8
(Google) JScript
Shakra
(Microsoft)
ActionScript
Tamarin
(Adobe)
NCSA Mosaïc
Netscape
Navigator
Mozilla Foundation
Créé par Brendan Eich en 1995, sortie en 1996 sur NN 2.0 & IE 3.0
Javascript
Sun Microsystems
Oracle
Java
JerryScript
(Samsung)
Rhino
(Mozilla)
Nashorn
(Oracle)
EjScript
(Samba 4,
AppWeb)
ECMA Script
Mocha
LiveScript
Un peu d’ordre..
Ça ne fait pas de mal
L’ère de la standardisation
ECMA International (http://www.ecma-international.org/)
 ECMA-262 6/1997
ECMAScript Edition 2015 (version 6), Javascript v2
Précédente ECMAScript 5
Javascript 1.8.5 27/7/2010
Mozilla FireFox 4 22/3/2011
 ECMA-327 ES-CP 6/2001
 ECMA-357 E4X 6/2004
Spécifications :
 ECMA-262 : http://www.ecma-international.org/publications/files/ECMA-
ST/Ecma-262.pdf
 ECMA-327 : http://www.ecma-international.org/publications/files/ECMA-
ST/Ecma-327.pdf
 ECMA-357 : http://www.ecma-international.org/publications/files/ECMA-
ST/Ecma-357.pdf
 XMLHttpRequest : http://www.w3.org/TR/XMLHttpRequest/
 HTML 5 : http://dev.w3.org/html5/spec/Overview.html
 CSS 3 : http://www.w3.org/Style/CSS/
 HTTP : http://www.w3.org/Protocols/
 DOM : http://www.w3.org/TR/DOM-level-3-Core/
1998 : le tournant
 Spécifications du DOM Level 1 1/1998
 MS Internet Explorer 5.0 9/1998
Implémente XMLHttpRequest comme ActiveX
Prémisses du Web 2.0
Le langage Javascript..
Quelques mots pour le dire
61 mots réservés
abstract, boolean, break, byte, case, catch, char, class,
const, continue, debugger, default, delete, do, double, else,
enum, export, extends, false, final, finally, float, for,
function, goto, if, implements, import, in, instanceof, int,
interface, long, native, new, null, package, private,
protected, public, return, short, static, super, switch,
synchronized, this, throw, throws, transient, true, try,
typeof, undefined, var, void, volatile, while, with
30 mots réservés utilisés
abstract, boolean, break, byte, case, catch, char, class,
const, continue, debugger, default, delete, do, double,
else, enum, export, extends, false, final, finally, float, for,
function, goto, if, implements, import, in, instanceof, int,
interface, long, native, new, null, package, private,
protected, public, return, short, static, super, switch,
synchronized, this, throw, throws, transient, true, try,
typeof, undefined, var, void, volatile, while, with
types natifs et prédéfinis
6 types natifs:
 string "une chaine"
 number 1.5e-2, NaN, Infinity
 boolean true, false
 function function(){…}
 object {}, null
 undefined undefined
4 types prédéfinies:
 Array [1,2]
 Date new Date()
 RegExp /^[a-z]+[0-9]{1,3}$/gi
 Error throw("Invalid_Value")
Javascript en quelques mots
 Langage de Script, Dynamique, Interprété
 Sensible à la casse
 Typage dynamique faible (duck typing)
 Orienté prototypes (objet par prototypes)
 Mono thread
 Asynchrone, par évènements
Javascript : pour quelques mots de plus
 Toutes les valeurs traitées comme des objets:
(.1253454).toPrecision(2) = .13
 Les types natifs et prédéfinis peuvent êtres étendus et les méthodes standards
réécrites :
Number.prototype.sqr = function(){return this*this;}
console.log( (3).sqr() );
 Toutes les valeurs ont leur équivalent booléen
!! [] = true !!function(){}=true !!null=false !!""=false
 Les objets créés sont effacés par le Garbage Collector quand plus utilisées.
 Les fonctions sont des objets de premières classe
 Les closures sont la façon la plus puissante de gérer mémoire/confidentialité.
new Number(.1253454)
.toPrecision(2)
.valueOf()
Ecriture idiomatique
var name = value || "default";
Javascript
et la guerre des moteurs
Browser = Javascript engine + layout engine
Mozilla Firefox SpiderMonkey, TraceMonkey, JägerMonkey, OdinMonkey (+ Gecko)
Google Chrome V8 (+ Webkit/Blink)
MS Internet Explorer Chakra (+ Trident)
Apple Safari JavascriptCore (+ Webkit)
Konqueror KJS (+KHTML/Webkit)
Javascript  Open Source
http://venturebeat.com/2015/08/19/here-are-the-top-10-programming-languages-used-on-github/
Javascript
pour croyants non pratiquants
AltJS ou la prolifération des clones
AltJS pour les croyants non pratiquants
 CoffeeScript, RedScript : à la sauce Ruby
 TypeScript, Javascript++, Objective-J, Latte-JS, JSX, oj sur-
ensembles de Javascript
 Closure Compiler, Dart, Go, GWT, AtScript, Traceur Google joue
avec JS et le défie
 Bonsai-C C-to-JS compiler (asm.js)
 Emscripten LLVM to JS
En connaitre davantage :
 https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js
 http://smurfpandey.github.io/altjs/
Javascript
et les défauts d'une création imparfaite
Critiques
 Absence de modules
difficulté de maintenance du code Javascript d’un site, dont le volume augmente
drastiquement et les risques d’erreur et d’incompatibilité grandissants.
 Absence de certains mécanismes
comme les variables au niveau block de code.
 Evènements
La gestion de callbacks avec traitement d’erreurs devient très vite infernale.
 Syntaxe trop ouverte
Qui n’a pas passé des heures à debugger à cause d’un (;) qui à tout changé ou
d’une variable qui a accidentellement couvert une variable globale
 Comportements inattendus
Quelques différences inattendues de traitement entre navigateurs.
ECMA Script
Une histoire tumultueuse
ECMA Script : Evolution
Édition Date Quelques particularités
1 6/1997 Edition initiale
2 6/1998 Réécriture norme ISO/IEC 16262
3 12/1999 Gestion des exceptions
4 x Classes. Version abandonnée
5 12/2009 Clarifie la version 3
6 (2015) 6/2015 Classes, Modules, Tableaux binaires,…
7 En cours
Node.js
JS de l’autre côté du miroir
Un saut de géant : du browser au serveur
Node.js : serveur web Javascript
 Projet open Source, initialement sponsorisé par Joyent
 Développé en 2009 par Ryan Lienhart Dahl et son équipe.
 Utilise le moteur Javascript open source Google V8
 Utilise les spécifications CommonJS
 Utilise des packages stockés dans NPM.
(http://npmjs.org 200k packages, 31M downloads/jour)
 Multiplateforme: Windows, Linux, OS X,…
 Versions :
 Version 4.0 08/09/2015
 Version 0.12.7 09/07/2014
Oubliez tout ce que vous savez pour
bien programmer sous Node.js
Oubliez surtout PHP !!
!
Hello World
Hello World
var express = require('express');
var app = express();
app.get("/", function(request, response) {
response.status(200).send('Hello World!');
});
app.get("/hi/:name", function (req, response) {
response.status(200).send('Hello '+request.params.name);
});
var server = app.listen(3000, function () {
console.log('Listening to port 3000...');
});
http://127.0.0.1:3000/
http://127.0.0.1:3000/hi/Samir
Qui utilise Node.js ?
https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node
Ils aiment Node.js
 LinkedIn (site mobile à la place de Ruby)
 Dow Jones
 eBay
 Microsoft (Windows Azure)
 HP (WebOS services)
 Paypal
 Flikr
 Rdio
 Telefonica
 Avira Gmbh (de)
 Jolicloud (fr)
 Sellsy (fr)
 …
Pour quel avantage ?
Histoire de LinkedIn
http://www.infoq.com/fr/news/2013/05/Ruby-on-Rails-Node-js-LinkedIn
LinkedIn a évalué 3 solutions possibles : Rails/Event Machine,
Python/Twisted et Node.js. Node.js a finalement été choisi car il propose
les avantages suivants :
 Meilleures performances, Node.js est plus de 20 fois plus rapide que
Rails pour certains scénarios
 Utilisation de seulement 3 serveurs au lieu de 30, ce qui laisse de la
place pour une croissance de 10 fois le trafic actuel
 Les ingénieurs front-end JavaScript peuvent participer au code du
serveur et les deux équipes ont finalement été fusionnées en une
seule
Kiran Prasad, Directeur de l’Ingénierie Mobile chez LinkedIn, 5/2013
asm.js
JS devient l’assembleur du web
Mozilla se tourne vers le futur
Emscripten
Javascript
LLVM
C / C++
Mozilla Firefox v22 & asm.js
Moteur de
jeux
Javascript
pour browser
Epic
Unreal
Engine
Des centaines de jeux
en C/C++
portés au browser
asm.js est un sous-ensemble très optimisé de Javascript
Déjà dans la boite :
programmes déjà portés à asm.js
 Langages : C/C++, Ruby, Perl, Python
 Libraires: OpenGL, Qt, PNaCl
 Game Engines : Unreal Engine 3/4, Unity, ScummVM,
BannanaBread
 Jeux : Doom, SuperTux, Dune II, Humble Bundle
Liste exhaustive ici : https://en.wikipedia.org/wiki/Asm.js
WebAssembly
plus loin (encore) dans la logique
Javascript in a binary cloth
WASM : Web Assembly
 Collaboration de: Apple, Google, Microsoft, Mozilla, WebKit,…
 Un nouveau format binaire
 Pas de bytecodes mais AST (Arbre Syntaxique Abstrait)
 Implémentation facile sur navigateur
 Elimine le goulot de performance du Parser
 Accélère le chargement
 N’accélère pas l’exécution de Javascript (par rapport à asm.js)
 Ne remplace pas Javascript mais est réservé aux code bas niveau
Embeded JS
Javascript OoO (Out-Of-Office)
Embeded Node.js
https://tessel.io/
Tessel 2 is a development platform
you can embed in a product. Build
fast with Node.js/io.js, then
optimize the hardware and build
thousands.
PREORDER FOR $35
Embeded Javascript
http://www.espruino.com/
54mm x 41 mm
48 kB ram
$40
33mm x 15 mm
96 kB ram
$25
The Best is Yet to Come
Merci pour votre attention

Weitere ähnliche Inhalte

Was ist angesagt?

Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! framework
Horacio Gonzalez
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
sabrine_hamdi
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Julien Jakubowski
 
Etat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS GeneveEtat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS Geneve
Alexandre Morgaut
 

Was ist angesagt? (20)

Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! framework
 
Présentation de Node.js
Présentation de Node.jsPrésentation de Node.js
Présentation de Node.js
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en Javascript
 
Php 100k
Php 100kPhp 100k
Php 100k
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs
 
JAVA 8
JAVA 8JAVA 8
JAVA 8
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
Introduction Kotlin
Introduction KotlinIntroduction Kotlin
Introduction Kotlin
 
Etat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS GeneveEtat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS Geneve
 
Introduction à MacRuby
Introduction à MacRubyIntroduction à MacRuby
Introduction à MacRuby
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 

Ähnlich wie The future of JavaScript

OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
Paris Open Source Summit
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013
Romain Linsolas
 

Ähnlich wie The future of JavaScript (20)

Chap1_PresentationJava.pdf
Chap1_PresentationJava.pdfChap1_PresentationJava.pdf
Chap1_PresentationJava.pdf
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016
 
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?
 
Server Side Javascript in the cloud
Server Side Javascript in the cloudServer Side Javascript in the cloud
Server Side Javascript in the cloud
 
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Chapitre 4 Java script
Chapitre 4 Java scriptChapitre 4 Java script
Chapitre 4 Java script
 
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & tools
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Solutions Linux 2008 - JavaScript
Solutions Linux 2008 - JavaScriptSolutions Linux 2008 - JavaScript
Solutions Linux 2008 - JavaScript
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lr
 
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs WebUne visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)
 
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013
 
Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
LyonJUG-2023-v1.0.pdf
LyonJUG-2023-v1.0.pdfLyonJUG-2023-v1.0.pdf
LyonJUG-2023-v1.0.pdf
 

Mehr von Algiers Tech Meetup

Mehr von Algiers Tech Meetup (12)

Introduction to aws
Introduction to awsIntroduction to aws
Introduction to aws
 
Data tracking using Google Analytics
Data tracking using Google AnalyticsData tracking using Google Analytics
Data tracking using Google Analytics
 
Introducing Firebase by Google
Introducing Firebase by GoogleIntroducing Firebase by Google
Introducing Firebase by Google
 
Presentation of Oracle database products
Presentation of Oracle database productsPresentation of Oracle database products
Presentation of Oracle database products
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Rex Agility at icosnet
Rex Agility at icosnetRex Agility at icosnet
Rex Agility at icosnet
 
Introduction to Arduino
Introduction to ArduinoIntroduction to Arduino
Introduction to Arduino
 
Overview of Telecommunication networks
Overview of Telecommunication networksOverview of Telecommunication networks
Overview of Telecommunication networks
 
Material Design for Android
Material Design for AndroidMaterial Design for Android
Material Design for Android
 
Security of Hosting Platforms
Security of Hosting PlatformsSecurity of Hosting Platforms
Security of Hosting Platforms
 
Agile Spirit
Agile SpiritAgile Spirit
Agile Spirit
 
OOP and Design Patterns
OOP and Design PatternsOOP and Design Patterns
OOP and Design Patterns
 

The future of JavaScript

  • 1. The Future of Javascript by Samir ROUABHI (rouabhi@gmail.com) Algiers Developer Meetup October 3rd, 2015
  • 2. Aux origines du web.. était le browser
  • 3. V8 (Google) JScript Shakra (Microsoft) ActionScript Tamarin (Adobe) NCSA Mosaïc Netscape Navigator Mozilla Foundation Créé par Brendan Eich en 1995, sortie en 1996 sur NN 2.0 & IE 3.0 Javascript Sun Microsystems Oracle Java JerryScript (Samsung) Rhino (Mozilla) Nashorn (Oracle) EjScript (Samba 4, AppWeb) ECMA Script Mocha LiveScript
  • 4. Un peu d’ordre.. Ça ne fait pas de mal
  • 5. L’ère de la standardisation ECMA International (http://www.ecma-international.org/)  ECMA-262 6/1997 ECMAScript Edition 2015 (version 6), Javascript v2 Précédente ECMAScript 5 Javascript 1.8.5 27/7/2010 Mozilla FireFox 4 22/3/2011  ECMA-327 ES-CP 6/2001  ECMA-357 E4X 6/2004
  • 6. Spécifications :  ECMA-262 : http://www.ecma-international.org/publications/files/ECMA- ST/Ecma-262.pdf  ECMA-327 : http://www.ecma-international.org/publications/files/ECMA- ST/Ecma-327.pdf  ECMA-357 : http://www.ecma-international.org/publications/files/ECMA- ST/Ecma-357.pdf  XMLHttpRequest : http://www.w3.org/TR/XMLHttpRequest/  HTML 5 : http://dev.w3.org/html5/spec/Overview.html  CSS 3 : http://www.w3.org/Style/CSS/  HTTP : http://www.w3.org/Protocols/  DOM : http://www.w3.org/TR/DOM-level-3-Core/
  • 7. 1998 : le tournant  Spécifications du DOM Level 1 1/1998  MS Internet Explorer 5.0 9/1998 Implémente XMLHttpRequest comme ActiveX Prémisses du Web 2.0
  • 9. 61 mots réservés abstract, boolean, break, byte, case, catch, char, class, const, continue, debugger, default, delete, do, double, else, enum, export, extends, false, final, finally, float, for, function, goto, if, implements, import, in, instanceof, int, interface, long, native, new, null, package, private, protected, public, return, short, static, super, switch, synchronized, this, throw, throws, transient, true, try, typeof, undefined, var, void, volatile, while, with
  • 10. 30 mots réservés utilisés abstract, boolean, break, byte, case, catch, char, class, const, continue, debugger, default, delete, do, double, else, enum, export, extends, false, final, finally, float, for, function, goto, if, implements, import, in, instanceof, int, interface, long, native, new, null, package, private, protected, public, return, short, static, super, switch, synchronized, this, throw, throws, transient, true, try, typeof, undefined, var, void, volatile, while, with
  • 11. types natifs et prédéfinis 6 types natifs:  string "une chaine"  number 1.5e-2, NaN, Infinity  boolean true, false  function function(){…}  object {}, null  undefined undefined 4 types prédéfinies:  Array [1,2]  Date new Date()  RegExp /^[a-z]+[0-9]{1,3}$/gi  Error throw("Invalid_Value")
  • 12. Javascript en quelques mots  Langage de Script, Dynamique, Interprété  Sensible à la casse  Typage dynamique faible (duck typing)  Orienté prototypes (objet par prototypes)  Mono thread  Asynchrone, par évènements
  • 13. Javascript : pour quelques mots de plus  Toutes les valeurs traitées comme des objets: (.1253454).toPrecision(2) = .13  Les types natifs et prédéfinis peuvent êtres étendus et les méthodes standards réécrites : Number.prototype.sqr = function(){return this*this;} console.log( (3).sqr() );  Toutes les valeurs ont leur équivalent booléen !! [] = true !!function(){}=true !!null=false !!""=false  Les objets créés sont effacés par le Garbage Collector quand plus utilisées.  Les fonctions sont des objets de premières classe  Les closures sont la façon la plus puissante de gérer mémoire/confidentialité. new Number(.1253454) .toPrecision(2) .valueOf() Ecriture idiomatique var name = value || "default";
  • 14. Javascript et la guerre des moteurs
  • 15. Browser = Javascript engine + layout engine Mozilla Firefox SpiderMonkey, TraceMonkey, JägerMonkey, OdinMonkey (+ Gecko) Google Chrome V8 (+ Webkit/Blink) MS Internet Explorer Chakra (+ Trident) Apple Safari JavascriptCore (+ Webkit) Konqueror KJS (+KHTML/Webkit)
  • 16. Javascript  Open Source http://venturebeat.com/2015/08/19/here-are-the-top-10-programming-languages-used-on-github/
  • 17. Javascript pour croyants non pratiquants AltJS ou la prolifération des clones
  • 18. AltJS pour les croyants non pratiquants  CoffeeScript, RedScript : à la sauce Ruby  TypeScript, Javascript++, Objective-J, Latte-JS, JSX, oj sur- ensembles de Javascript  Closure Compiler, Dart, Go, GWT, AtScript, Traceur Google joue avec JS et le défie  Bonsai-C C-to-JS compiler (asm.js)  Emscripten LLVM to JS En connaitre davantage :  https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js  http://smurfpandey.github.io/altjs/
  • 19. Javascript et les défauts d'une création imparfaite
  • 20. Critiques  Absence de modules difficulté de maintenance du code Javascript d’un site, dont le volume augmente drastiquement et les risques d’erreur et d’incompatibilité grandissants.  Absence de certains mécanismes comme les variables au niveau block de code.  Evènements La gestion de callbacks avec traitement d’erreurs devient très vite infernale.  Syntaxe trop ouverte Qui n’a pas passé des heures à debugger à cause d’un (;) qui à tout changé ou d’une variable qui a accidentellement couvert une variable globale  Comportements inattendus Quelques différences inattendues de traitement entre navigateurs.
  • 22. ECMA Script : Evolution Édition Date Quelques particularités 1 6/1997 Edition initiale 2 6/1998 Réécriture norme ISO/IEC 16262 3 12/1999 Gestion des exceptions 4 x Classes. Version abandonnée 5 12/2009 Clarifie la version 3 6 (2015) 6/2015 Classes, Modules, Tableaux binaires,… 7 En cours
  • 23. Node.js JS de l’autre côté du miroir Un saut de géant : du browser au serveur
  • 24. Node.js : serveur web Javascript  Projet open Source, initialement sponsorisé par Joyent  Développé en 2009 par Ryan Lienhart Dahl et son équipe.  Utilise le moteur Javascript open source Google V8  Utilise les spécifications CommonJS  Utilise des packages stockés dans NPM. (http://npmjs.org 200k packages, 31M downloads/jour)  Multiplateforme: Windows, Linux, OS X,…  Versions :  Version 4.0 08/09/2015  Version 0.12.7 09/07/2014
  • 25. Oubliez tout ce que vous savez pour bien programmer sous Node.js Oubliez surtout PHP !! !
  • 27. Hello World var express = require('express'); var app = express(); app.get("/", function(request, response) { response.status(200).send('Hello World!'); }); app.get("/hi/:name", function (req, response) { response.status(200).send('Hello '+request.params.name); }); var server = app.listen(3000, function () { console.log('Listening to port 3000...'); }); http://127.0.0.1:3000/ http://127.0.0.1:3000/hi/Samir
  • 28. Qui utilise Node.js ? https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node
  • 29. Ils aiment Node.js  LinkedIn (site mobile à la place de Ruby)  Dow Jones  eBay  Microsoft (Windows Azure)  HP (WebOS services)  Paypal  Flikr  Rdio  Telefonica  Avira Gmbh (de)  Jolicloud (fr)  Sellsy (fr)  …
  • 31. Histoire de LinkedIn http://www.infoq.com/fr/news/2013/05/Ruby-on-Rails-Node-js-LinkedIn LinkedIn a évalué 3 solutions possibles : Rails/Event Machine, Python/Twisted et Node.js. Node.js a finalement été choisi car il propose les avantages suivants :  Meilleures performances, Node.js est plus de 20 fois plus rapide que Rails pour certains scénarios  Utilisation de seulement 3 serveurs au lieu de 30, ce qui laisse de la place pour une croissance de 10 fois le trafic actuel  Les ingénieurs front-end JavaScript peuvent participer au code du serveur et les deux équipes ont finalement été fusionnées en une seule Kiran Prasad, Directeur de l’Ingénierie Mobile chez LinkedIn, 5/2013
  • 32. asm.js JS devient l’assembleur du web Mozilla se tourne vers le futur
  • 34. Mozilla Firefox v22 & asm.js Moteur de jeux Javascript pour browser Epic Unreal Engine Des centaines de jeux en C/C++ portés au browser asm.js est un sous-ensemble très optimisé de Javascript
  • 35. Déjà dans la boite : programmes déjà portés à asm.js  Langages : C/C++, Ruby, Perl, Python  Libraires: OpenGL, Qt, PNaCl  Game Engines : Unreal Engine 3/4, Unity, ScummVM, BannanaBread  Jeux : Doom, SuperTux, Dune II, Humble Bundle Liste exhaustive ici : https://en.wikipedia.org/wiki/Asm.js
  • 36. WebAssembly plus loin (encore) dans la logique Javascript in a binary cloth
  • 37. WASM : Web Assembly  Collaboration de: Apple, Google, Microsoft, Mozilla, WebKit,…  Un nouveau format binaire  Pas de bytecodes mais AST (Arbre Syntaxique Abstrait)  Implémentation facile sur navigateur  Elimine le goulot de performance du Parser  Accélère le chargement  N’accélère pas l’exécution de Javascript (par rapport à asm.js)  Ne remplace pas Javascript mais est réservé aux code bas niveau
  • 38. Embeded JS Javascript OoO (Out-Of-Office)
  • 39. Embeded Node.js https://tessel.io/ Tessel 2 is a development platform you can embed in a product. Build fast with Node.js/io.js, then optimize the hardware and build thousands. PREORDER FOR $35
  • 40. Embeded Javascript http://www.espruino.com/ 54mm x 41 mm 48 kB ram $40 33mm x 15 mm 96 kB ram $25
  • 41. The Best is Yet to Come Merci pour votre attention