SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)Julien CROUZET
 
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 pourquoipkernevez
 
Perfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramePerfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramebleporini
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautesAbdenour Bouateli
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Jean-Michel Doudoux
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Microsoft
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Parischristophep21
 
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 Microsoftdavrous
 
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 10Jean-Michel Doudoux
 
Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en JavascriptBenoit Zohar
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEBAbbes Rharrab
 
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! frameworkHoracio Gonzalez
 
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 2013Julien Jakubowski
 
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 introductionsabrine_hamdi
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage GoSylvain Wallez
 

Tendances (19)

Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)
 
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
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Perfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramePerfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui rame
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautes
 
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 !?
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8
 
La programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PFLa programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PF
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Paris
 
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
 
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
 
Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en Javascript
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
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
 
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
 
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
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage Go
 

En vedette

War of Native Speed on Web (SITCON2016)
War of Native Speed on Web (SITCON2016)War of Native Speed on Web (SITCON2016)
War of Native Speed on Web (SITCON2016)Min-Yih Hsu
 
Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.John Dalziel
 
Web assembly overview by Mikhail Sorokovsky
Web assembly overview by Mikhail SorokovskyWeb assembly overview by Mikhail Sorokovsky
Web assembly overview by Mikhail SorokovskyValeriia Maliarenko
 
An Introduction to WebAssembly
An Introduction to WebAssemblyAn Introduction to WebAssembly
An Introduction to WebAssemblyDaniel Budden
 
Is WebAssembly the killer of JavaScript?
Is WebAssembly the killer of JavaScript?Is WebAssembly the killer of JavaScript?
Is WebAssembly the killer of JavaScript?Boyan Mihaylov
 
Js engine performance
Js engine performanceJs engine performance
Js engine performancepaullfc
 
Virtual machine and javascript engine
Virtual machine and javascript engineVirtual machine and javascript engine
Virtual machine and javascript engineDuoyi Wu
 

En vedette (7)

War of Native Speed on Web (SITCON2016)
War of Native Speed on Web (SITCON2016)War of Native Speed on Web (SITCON2016)
War of Native Speed on Web (SITCON2016)
 
Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.
 
Web assembly overview by Mikhail Sorokovsky
Web assembly overview by Mikhail SorokovskyWeb assembly overview by Mikhail Sorokovsky
Web assembly overview by Mikhail Sorokovsky
 
An Introduction to WebAssembly
An Introduction to WebAssemblyAn Introduction to WebAssembly
An Introduction to WebAssembly
 
Is WebAssembly the killer of JavaScript?
Is WebAssembly the killer of JavaScript?Is WebAssembly the killer of JavaScript?
Is WebAssembly the killer of JavaScript?
 
Js engine performance
Js engine performanceJs engine performance
Js engine performance
 
Virtual machine and javascript engine
Virtual machine and javascript engineVirtual machine and javascript engine
Virtual machine and javascript engine
 

Similaire à The Future of Javascript

Chap1_PresentationJava.pdf
Chap1_PresentationJava.pdfChap1_PresentationJava.pdf
Chap1_PresentationJava.pdfsayf7
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
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?Microsoft
 
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?benjguin
 
Server Side Javascript in the cloud
Server Side Javascript in the cloudServer Side Javascript in the cloud
Server Side Javascript in the cloudstefounet
 
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 GeneveAlexandre Morgaut
 
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 & tools
Javascript & toolsJavascript & tools
Javascript & toolsSlim Soussi
 
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 17Jean-Michel Doudoux
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Solutions Linux 2008 - JavaScript
Solutions Linux 2008 - JavaScriptSolutions Linux 2008 - JavaScript
Solutions Linux 2008 - JavaScriptRaphaël Semeteys
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lroxmed
 
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 WebFrédéric Harper
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Tugdual Grall
 
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.pdfJean-Michel Doudoux
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013Romain Linsolas
 
Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Adyax
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 

Similaire à 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?
 
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
 
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
 
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
 
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"
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 

Plus de Dr Samir A. ROUABHI

10 innovations qui bouleversent le e-commerce
10 innovations qui bouleversent le e-commerce10 innovations qui bouleversent le e-commerce
10 innovations qui bouleversent le e-commerceDr Samir A. ROUABHI
 
Effectuation : comment les entrepreneurs pensent et agissent
Effectuation : comment les entrepreneurs pensent et agissentEffectuation : comment les entrepreneurs pensent et agissent
Effectuation : comment les entrepreneurs pensent et agissentDr Samir A. ROUABHI
 
Crossing The Chasm : l'Innovation de Rupture à la conquête du marché
Crossing The Chasm : l'Innovation de Rupture à la conquête du marchéCrossing The Chasm : l'Innovation de Rupture à la conquête du marché
Crossing The Chasm : l'Innovation de Rupture à la conquête du marchéDr Samir A. ROUABHI
 
Démarches entrepreneuriales : se lancer avec succès
Démarches entrepreneuriales : se lancer avec succèsDémarches entrepreneuriales : se lancer avec succès
Démarches entrepreneuriales : se lancer avec succèsDr Samir A. ROUABHI
 

Plus de Dr Samir A. ROUABHI (7)

10 innovations qui bouleversent le e-commerce
10 innovations qui bouleversent le e-commerce10 innovations qui bouleversent le e-commerce
10 innovations qui bouleversent le e-commerce
 
Effectuation : comment les entrepreneurs pensent et agissent
Effectuation : comment les entrepreneurs pensent et agissentEffectuation : comment les entrepreneurs pensent et agissent
Effectuation : comment les entrepreneurs pensent et agissent
 
Crossing The Chasm : l'Innovation de Rupture à la conquête du marché
Crossing The Chasm : l'Innovation de Rupture à la conquête du marchéCrossing The Chasm : l'Innovation de Rupture à la conquête du marché
Crossing The Chasm : l'Innovation de Rupture à la conquête du marché
 
Démarches entrepreneuriales : se lancer avec succès
Démarches entrepreneuriales : se lancer avec succèsDémarches entrepreneuriales : se lancer avec succès
Démarches entrepreneuriales : se lancer avec succès
 
L'Innovation de Rupture
L'Innovation de RuptureL'Innovation de Rupture
L'Innovation de Rupture
 
Lean Startup
Lean StartupLean Startup
Lean Startup
 
Business Model Canvas
Business Model CanvasBusiness Model Canvas
Business Model Canvas
 

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