SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
JavaScriptpour les développeurs .NET Thomas Conté Microsoft
Agenda Brève histoire de JavaScript JavaScript dans IE JavaScript: le langage ECMAScript5 Frameworks& librairies JavaScript côté serveur Node.JS & Windows Azure
Piqûre de rappel
Brève histoire de JavaScript Netscape & Brendan Eich Mocha, LiveScript, JavaScript Microsoft JScript: IE3, 1996 Même langage, nom différent ECMAScriptPremière édition: Juin 1997 AJAX XMLHTTP : IE5, 1999 JSON "Découvert" par Crockford en 2001-2002 jQuery& John Resig: 2006 Les temps modernes?
Le chemin parcouru… <a href="index.html" onMouseOut="MM_swapImgRestore()"  onMouseOver="MM_swapImage('img1978','','bar_nav_on_01.gif',1)">         <imgname="img1978" border="0" src="bar_nav_no_01.gif" width="24" height="88"> </a> ... <script language="JavaScript"> functionMM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } </script> Depuis le JavaScript généré par DreamWeaver… Jusqu’aux applications modernes les plus complexes: Office Web Apps, Bing Maps, Gmail (443K LOC), etc.
JavaScript, l’Assembleur du Web? Scott Hanselman : JavaScript, l'Assembleur du Web? JavaScript est universellement déployé Il est rapide, et devient de plus en plus rapide JavaScript est le langage "de bas niveau" du Web Vous pouvez le fignoler à la main, ou le générer à partir d'un langage de plus haut niveau (CoffeScript, Script#, etc.)
JavaScript dans Internet Explorer
Chakra Chakra est le nouveau moteur JavaScript dans IE9 et + Performances dignes d’un « navigateur moderne » Benchmarks + scénarios « réels » Support JavaScript dernier cri ECMAScript 5
Performances La course aux benchmarks E.g. WebKitSunSpider Nécessaire, mais pas suffisant! Il faut optimiser pour la « vraie vie »
JSMeter http://research.microsoft.com/en-us/projects/jsmeter/ Instrumentation de Internet Explorer 8 escript.cpp custom jscript.dll website visits custom trace files Analyseurs custom trace files
« JavaScript & Metaperformance » Présentation de Douglas Crockford à Velocity2011 Dans le même esprit que MS Research, Douglas Crockforda utilisé sa propre application JSLint pour comparer les interpréteurs
Crockford « JSLint benchmark »
Architecture de Chakra
Démo Chakra
Developer Tools
Démo Developer Tools
JavaScript: le langage
JavaScript !== C# Règles de portée (scoping) Utilisation de Patterns type Module pour éviter de polluer la portée globale « traction » des variables et fonctions (hoisting) Les valeurs « presque fausses » (false-y values) Opérateurs de comparaison Déclaration des tableaux & objets Utilisation du for … in (indice: pas comme en C#) Utilisation des Closures …
scoping function mange() {// Code incorrect!    var quoi = "un mars",         jaiFaim = true;        if ( jaiFaim ) {        // En C#, timeToWaitn’est accessible que dans ce if; pas en JavaScript!        var timeToWait = 10;                console.log( "Attendre " + timeToWait + " minutes" );                mache();    }        function mache() {        var comment = "ma bouche";                // Cette fonction a accès à timeToWait car elle est en fait dans        // le périmètre de la fonction eat()        console.log( "Après " + timeToWait +             " minutes, je mange " + quoi + " avec " + comment );    }}mange();// Attendre 10 minutes// Après 10 minutes, je mange un mars avec ma bouche Awful Part
scoping // Code correctfunction mange() {    var quoi = "un mars",         jaiFaim = true,        timeToWait, bodyPart;        if ( jaiFaim ) {        timeToWait = 10;                console.log( "Attendre " + timeToWait + " minutes" );                mache();    }        function mache() {        var comment = "ma bouche";                console.log( "Après " + timeToWait +             " minutes, je mange " + quoi +             " avec " + comment );    }}mange();// Attendre 10 minutes// Après 10 minutes, je mange un mars avec ma bouche
hoisting console.log( someVariable ); //undefinedvar someVariable = 42; //Global variableconsole.log( someVariable ); // 42function doSomething() {    console.log( someVariable ); // undefined    //Pourquoi undefined??    someVariable = 1    console.log( someVariable ); // 1        console.log( window.someVariable ); // 42    //Pourquoi 42?        if ( false ) {        var someVariable = 0;    }}doSomething();
hoisting var someVariable = undefined;console.log( someVariable ); //undefinedsomeVariable = 42; //Global variableconsole.log( someVariable ); // 42function doSomething() {    //Le hoisting amène le var en haut de la fonction,     //et l’initialise à undefined !    var someVariable = undefined;    console.log( someVariable ); // undefined    someVariable = 1    console.log( someVariable ); // 1    //Cette ligne de code n’accède pas à la var globale,    //mais à la locale qui a été « tractée »    console.log( window.someVariable ); // 42    if ( false ) {        someVariable = 0;    }}doSomething();
false-y values false null undefined "" (empty string) 0 NaN (not a number) Awful Part
comparaisons console.log(0=='');//true console.log(0=='0');//true console.log(false=='0');//true console.log(null==undefined);//true console.log(0=='  ');//true
comparaisons console.log(0==='');//false console.log(0==='0');//false console.log(false==='0');//false console.log(null===undefined); //false console.log(0==='  ');//false
tableaux & objets var person={ firstName:"Thomas", lastName:"Conté", sayFullName:function(){ 	console.log(this.firstName+" "+ this.lastName); } }, keys=["123","676","242","4e3"];
objets & prototypes function Car(model, year, miles) {   this.model = model;   this.year  = year;   this.miles = miles;} /* On utilise Object.prototype.newMethod et pas Object.prototype sinon l'on redéfinit le prototype!*/Car.prototype.toString = function() {        return this.model + " has done " +         this.miles + " miles";};  var civic = new Car("Honda Civic", 2009, 20000);var mondeo = new Car("Ford Mondeo", 2010, 5000); console.log(civic.toString());
for … in var myArray = [], name;myArray[5] = "test";console.log( myArray.length ); //6Array.prototype.someVariable = "pourquoi?";for ( name in myArray ) {    console.log( name, myArray[name] );     //Outputs...     //   5, test    //   someVariable, pourquoi ?}
var myArray = [], name;myArray[5] = "test";console.log( myArray.length ); //6for ( var i = 0, length = myArray.length; i < length; i++ ) {    console.log( i, myArray[i] );     //Outputs...    //   0, undefined    //   1, undefined    //   2, undefined    //   3, undefined    //   4, undefined    //   5, test } for … in
for … in var Person = function( firstName, lastName ) {  this.firstName = firstName;  this.lastName = lastName;  return this;};Person.prototype = {  isMarried : false,  hasKids: false};var john = new Person( "John", "Smith" ),  linda = new Person( "Linda", "Davis" ),  name;john.isMarried = true; console.log( "sans vérifier hasOwnProperty" );for ( name in john ) {  console.log( name + ": " + john[name] );   //Outputs  //  firstName: John   //  lastName: Smith  //  isMarried: true  //  hasKids: false}console.log( "en vérifiant hasOwnProperty" );for ( name in linda ) {  if ( linda.hasOwnProperty(name) ) {    console.log( name + ": " + linda[name] );     //Outputs    //  firstName: Linda    //  lastName: Davis  }}
closures /* “Une closure est un type d'objet particulier qui combine deux éléments: une fonction, et l'environnement dans lequel cette fonction a été créée. L'environnement contient toutes les variables locales qui étaient dans le périmètre au moment de la création de la closure.” -- https://developer.mozilla.org/en/JavaScript/Guide/Closures */function makeAdder( x ) {    return function( y ) {        return x + y;    };}var add5 = makeAdder( 5 );var add10 = makeAdder( 10 );console.log( add5(2) ); // 7console.log( add10(2) ); // 12
closures for (var i = 0; i < 10; i++) {  document.getElementById('box' + i).onclick = function() {    alert('You clicked on box #' + i);  };} pas marche! for (var i = 0; i < 10; i++) {  document.getElementById('box'+i).onclick = (function(index){    return function() {      alert('You clicked on box #' + index);    };  })(i);} marche!
module var testModule = (function(){    var counter = 0;    return {        incrementCounter: function() {            return counter++;        },        resetCounter: function() {            console.log('counterwas:' + counter);            counter = 0        }    }})(); /*test*/testModule.incrementCounter();testModule.resetCounter();
ECMAScript 5
Historique
Les apports d’ECMAScript 5 Énormément de « petits » changements pour rendre le langage plus cohérent « strict mode » La plus importante nouveauté d’après Crockford Supporté à partir de IE10 Modifications de la syntaxe JSON Nouvelles méthodes: tableaux, dates… Modèle objet amélioré Object.create, Object.keys … Getters & Setters Meta Object API …
Strict Mode Activé en ajoutant la chaîne magique: ‘use strict’; Ignorée par les précédents interpréteurs Périmètre fichier ou fonction (recommandé) Plus de variables globales implicites this n’est plus relié au scope global dans un appel de fonction  plus de pollution accidentelle Et bien d’autres mesures de sécurité Recommandation: utiliser Strict Mode par défaut dès aujourd’hui
Démo ECMAScript 5
Frameworks
Script# Projet de Nikhil Kothari, aujourd'hui Partner Engineer chez Microsoft: http://projects.nikhilk.net/ScriptSharp Utilisé en interne par Microsoft Office Web Applications / SharePoint Office Web Services Bing : Maps, Mobile Windows Live Script# permet de compiler du C# en JavaScript On gagne la productivité des outils .NET, Visual Studio Particulièrement intéressant sur de grosses applications Focalisé sur la production d’applications JavaScript optimales (plus que sur le portage d’applications .NET)
Knockout.JS Projet de Steve Sanderdon, PM Web Tools chez Microsoft http://knockoutjs.com/ Permet d’utiliser le pattern MVVM pour développer des interfaces utilisateur HTML / JavaScript Implémente le pattern Observable Bindingbi-directionnel Fournit un système de templating permettant de générer l’interface à partir du ViewModel Exemples: http://knockoutjs.com/examples/
RxJS Projet mené par l'équipe Rx chez Microsoft http://msdn.microsoft.com/en-us/data/gg577609 Framework d’Event Processing, existe aussi pour .NET Particulièrement adapté à la nature asynchrone de JavaScript Basé sur deux notions principales: Observable Sequences Observers Sources de Séquences : Timers, DOM, AJAX, … ou custom Projections : .Select() Composition: .Throttle(), .DistinctUntilChanged(), …
RxJS varinput = $("#searchInput"); varwords = input.toObservable("keyup")             .Select(function(x) { returninput.val(); })             .Throttle(500)             .DistinctUntilChanged()             .Select(function(term) { return search(term); })             .Switch(); words.Subscribe(function(data) {   $("#results").empty();   $.each(data, function(index, value) {     $("#results").append("<li>" + value + "</li>");  }); });
JavaScript sur le serveur
Node.JS Node.JS est développé par Ryan Dahl chez Joyent C’est un framework permettant de développer des services haute performances sur un modèle asynchrone L’idée étant que le modèle asynchrone est plus performant et plus efficace que le classique modèle multithreadé quand on a beaucoup d’entrées-sorties à gérer Semblable dans le principe à l’Async CTP JavaScript choisi car particulièrement adapté au développement asynchrone grâce à ses forts aspects fonctionnels Le framework intègre le protocole HTTP en standard ainsi qu’une librairie système entièrement asynchrone
Hello Node varhttp = require('http'),   mysql= (new (require('mysql').Client)({user: 'root'})); mysql.connect(); mysql.query('use castle;'); http.createServer(function (req, res) {   res.writeHead(200, {'Content-Type': 'text/json'}); mysql.query('select * from dragons', function (e, d) {   if (e) {            res.end('ERROR');  } else {  res.end(JSON.stringify(d)); } }); }).listen(8124, '127.0.0.1'); console.log('Server running at http://127.0.0.1:8124/');
Node.JS dans Windows Azure Microsoft aide officiellement Ryan Dahl à porter Node.JS sur Windows Node est constitué d’un seul exécutable, node.exe, donc très simple à inclure dans un WorkerRole
Démo Node.JS sur Windows Azure
Conclusion JavaScript est aujourd’hui l’un des langages de programmation les plus populaires Ses performances en font un environnement d’exécution de premier ordre, dans le navigateur et même sur le serveur Microsoft investit pour faire de JavaScript un langage de premier ordre sur sa plateforme: Performances: IE9, IE10 Respect des standards: ECMAScript 5 Outils de développement: F12, Dev11 Frameworks … et plus encore à venir!
Brendan Eich, CapitolJS : http://www.slideshare.net/BrendanEich/capitol-js

Weitere ähnliche Inhalte

Andere mochten auch

TechDays 2010 (CLO202) : Introduction à Windows Azure
TechDays 2010 (CLO202) : Introduction à Windows AzureTechDays 2010 (CLO202) : Introduction à Windows Azure
TechDays 2010 (CLO202) : Introduction à Windows AzureThomas Conté
 
Rapport morand manceau_-_pour_une_nouvelle_vision_de_l_innovation_-_escp_euro...
Rapport morand manceau_-_pour_une_nouvelle_vision_de_l_innovation_-_escp_euro...Rapport morand manceau_-_pour_une_nouvelle_vision_de_l_innovation_-_escp_euro...
Rapport morand manceau_-_pour_une_nouvelle_vision_de_l_innovation_-_escp_euro...Cyril Durand
 
Architecture d'une application Facebook pour Windows Azure
Architecture d'une application Facebook pour Windows AzureArchitecture d'une application Facebook pour Windows Azure
Architecture d'une application Facebook pour Windows AzureThomas Conté
 
TechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans AzureTechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans AzureThomas Conté
 
TechDays 2010 (CLO301) : Windows Azure Comment Migrer Une Application
TechDays 2010 (CLO301) : Windows Azure Comment Migrer Une ApplicationTechDays 2010 (CLO301) : Windows Azure Comment Migrer Une Application
TechDays 2010 (CLO301) : Windows Azure Comment Migrer Une ApplicationThomas Conté
 

Andere mochten auch (8)

TechDays 2010 (CLO202) : Introduction à Windows Azure
TechDays 2010 (CLO202) : Introduction à Windows AzureTechDays 2010 (CLO202) : Introduction à Windows Azure
TechDays 2010 (CLO202) : Introduction à Windows Azure
 
Rapport morand manceau_-_pour_une_nouvelle_vision_de_l_innovation_-_escp_euro...
Rapport morand manceau_-_pour_une_nouvelle_vision_de_l_innovation_-_escp_euro...Rapport morand manceau_-_pour_une_nouvelle_vision_de_l_innovation_-_escp_euro...
Rapport morand manceau_-_pour_une_nouvelle_vision_de_l_innovation_-_escp_euro...
 
Technocles2010 2
Technocles2010 2Technocles2010 2
Technocles2010 2
 
Architecture d'une application Facebook pour Windows Azure
Architecture d'une application Facebook pour Windows AzureArchitecture d'une application Facebook pour Windows Azure
Architecture d'une application Facebook pour Windows Azure
 
Technocles2010 3
Technocles2010 3Technocles2010 3
Technocles2010 3
 
Technocles2010 1
Technocles2010 1Technocles2010 1
Technocles2010 1
 
TechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans AzureTechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans Azure
 
TechDays 2010 (CLO301) : Windows Azure Comment Migrer Une Application
TechDays 2010 (CLO301) : Windows Azure Comment Migrer Une ApplicationTechDays 2010 (CLO301) : Windows Azure Comment Migrer Une Application
TechDays 2010 (CLO301) : Windows Azure Comment Migrer Une Application
 

Ähnlich wie JavaScript pour les développeurs .NET

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
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Ruau Mickael
 
Jump Camp - HTML5
Jump Camp - HTML5Jump Camp - HTML5
Jump Camp - HTML5chaudavid
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejsnaholyr
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
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
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
Beyond F5 - windbg et .Net
Beyond F5 - windbg et .NetBeyond F5 - windbg et .Net
Beyond F5 - windbg et .NetYann Schwartz
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la viecluelessjoe
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVCNathaniel Richand
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 

Ähnlich wie JavaScript pour les développeurs .NET (20)

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
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
 
Applets
AppletsApplets
Applets
 
Jump Camp - HTML5
Jump Camp - HTML5Jump Camp - HTML5
Jump Camp - HTML5
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejs
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
Introduction à PHP
Introduction à PHPIntroduction à PHP
Introduction à PHP
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
 
Beyond F5 - windbg et .Net
Beyond F5 - windbg et .NetBeyond F5 - windbg et .Net
Beyond F5 - windbg et .Net
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Tp-jquery
Tp-jqueryTp-jquery
Tp-jquery
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 

Mehr von Thomas Conté

Node.JS Paris Meetup - the Tessel microcontroller, Azure and Project Oxford
Node.JS Paris Meetup - the Tessel microcontroller, Azure and Project OxfordNode.JS Paris Meetup - the Tessel microcontroller, Azure and Project Oxford
Node.JS Paris Meetup - the Tessel microcontroller, Azure and Project OxfordThomas Conté
 
Tessel + Azure IoT hackathon intro
Tessel + Azure IoT hackathon introTessel + Azure IoT hackathon intro
Tessel + Azure IoT hackathon introThomas Conté
 
DevSum'15 : Microsoft Azure and Things
DevSum'15 : Microsoft Azure and ThingsDevSum'15 : Microsoft Azure and Things
DevSum'15 : Microsoft Azure and ThingsThomas Conté
 
Azure Web Camp : Cache Distribué
Azure Web Camp : Cache DistribuéAzure Web Camp : Cache Distribué
Azure Web Camp : Cache DistribuéThomas Conté
 
Azure Web Camp : Moteur de Recherche
Azure Web Camp : Moteur de RechercheAzure Web Camp : Moteur de Recherche
Azure Web Camp : Moteur de RechercheThomas Conté
 
Azure Web Camp : NoSQL
Azure Web Camp : NoSQLAzure Web Camp : NoSQL
Azure Web Camp : NoSQLThomas Conté
 
Running Java workloads in Microsoft Azure
Running Java workloads in Microsoft AzureRunning Java workloads in Microsoft Azure
Running Java workloads in Microsoft AzureThomas Conté
 
TechDays 2014 : tour d'horizon de Java dans Azure
TechDays 2014 : tour d'horizon de Java dans AzureTechDays 2014 : tour d'horizon de Java dans Azure
TechDays 2014 : tour d'horizon de Java dans AzureThomas Conté
 
Presentation: Java in the Cloud with Windows Azure
Presentation: Java in the Cloud with Windows AzurePresentation: Java in the Cloud with Windows Azure
Presentation: Java in the Cloud with Windows AzureThomas Conté
 
Présentation Windows Azure - MS Days 2011
Présentation Windows Azure - MS Days 2011Présentation Windows Azure - MS Days 2011
Présentation Windows Azure - MS Days 2011Thomas Conté
 
ReMix11 Paris: Windows Azure & développement mobile
ReMix11 Paris: Windows Azure & développement mobileReMix11 Paris: Windows Azure & développement mobile
ReMix11 Paris: Windows Azure & développement mobileThomas Conté
 
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0Thomas Conté
 

Mehr von Thomas Conté (13)

Node.JS Paris Meetup - the Tessel microcontroller, Azure and Project Oxford
Node.JS Paris Meetup - the Tessel microcontroller, Azure and Project OxfordNode.JS Paris Meetup - the Tessel microcontroller, Azure and Project Oxford
Node.JS Paris Meetup - the Tessel microcontroller, Azure and Project Oxford
 
Tessel + Azure IoT hackathon intro
Tessel + Azure IoT hackathon introTessel + Azure IoT hackathon intro
Tessel + Azure IoT hackathon intro
 
DevSum'15 : Microsoft Azure and Things
DevSum'15 : Microsoft Azure and ThingsDevSum'15 : Microsoft Azure and Things
DevSum'15 : Microsoft Azure and Things
 
Azure Web Camp : Cache Distribué
Azure Web Camp : Cache DistribuéAzure Web Camp : Cache Distribué
Azure Web Camp : Cache Distribué
 
Azure Web Camp : Moteur de Recherche
Azure Web Camp : Moteur de RechercheAzure Web Camp : Moteur de Recherche
Azure Web Camp : Moteur de Recherche
 
Azure Web Camp : NoSQL
Azure Web Camp : NoSQLAzure Web Camp : NoSQL
Azure Web Camp : NoSQL
 
Running Java workloads in Microsoft Azure
Running Java workloads in Microsoft AzureRunning Java workloads in Microsoft Azure
Running Java workloads in Microsoft Azure
 
TechDays 2014 : tour d'horizon de Java dans Azure
TechDays 2014 : tour d'horizon de Java dans AzureTechDays 2014 : tour d'horizon de Java dans Azure
TechDays 2014 : tour d'horizon de Java dans Azure
 
Linux on azure
Linux on azureLinux on azure
Linux on azure
 
Presentation: Java in the Cloud with Windows Azure
Presentation: Java in the Cloud with Windows AzurePresentation: Java in the Cloud with Windows Azure
Presentation: Java in the Cloud with Windows Azure
 
Présentation Windows Azure - MS Days 2011
Présentation Windows Azure - MS Days 2011Présentation Windows Azure - MS Days 2011
Présentation Windows Azure - MS Days 2011
 
ReMix11 Paris: Windows Azure & développement mobile
ReMix11 Paris: Windows Azure & développement mobileReMix11 Paris: Windows Azure & développement mobile
ReMix11 Paris: Windows Azure & développement mobile
 
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0
 

JavaScript pour les développeurs .NET

  • 1.
  • 2. JavaScriptpour les développeurs .NET Thomas Conté Microsoft
  • 3. Agenda Brève histoire de JavaScript JavaScript dans IE JavaScript: le langage ECMAScript5 Frameworks& librairies JavaScript côté serveur Node.JS & Windows Azure
  • 5. Brève histoire de JavaScript Netscape & Brendan Eich Mocha, LiveScript, JavaScript Microsoft JScript: IE3, 1996 Même langage, nom différent ECMAScriptPremière édition: Juin 1997 AJAX XMLHTTP : IE5, 1999 JSON "Découvert" par Crockford en 2001-2002 jQuery& John Resig: 2006 Les temps modernes?
  • 6. Le chemin parcouru… <a href="index.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('img1978','','bar_nav_on_01.gif',1)"> <imgname="img1978" border="0" src="bar_nav_no_01.gif" width="24" height="88"> </a> ... <script language="JavaScript"> functionMM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } </script> Depuis le JavaScript généré par DreamWeaver… Jusqu’aux applications modernes les plus complexes: Office Web Apps, Bing Maps, Gmail (443K LOC), etc.
  • 7. JavaScript, l’Assembleur du Web? Scott Hanselman : JavaScript, l'Assembleur du Web? JavaScript est universellement déployé Il est rapide, et devient de plus en plus rapide JavaScript est le langage "de bas niveau" du Web Vous pouvez le fignoler à la main, ou le générer à partir d'un langage de plus haut niveau (CoffeScript, Script#, etc.)
  • 9. Chakra Chakra est le nouveau moteur JavaScript dans IE9 et + Performances dignes d’un « navigateur moderne » Benchmarks + scénarios « réels » Support JavaScript dernier cri ECMAScript 5
  • 10. Performances La course aux benchmarks E.g. WebKitSunSpider Nécessaire, mais pas suffisant! Il faut optimiser pour la « vraie vie »
  • 11. JSMeter http://research.microsoft.com/en-us/projects/jsmeter/ Instrumentation de Internet Explorer 8 escript.cpp custom jscript.dll website visits custom trace files Analyseurs custom trace files
  • 12. « JavaScript & Metaperformance » Présentation de Douglas Crockford à Velocity2011 Dans le même esprit que MS Research, Douglas Crockforda utilisé sa propre application JSLint pour comparer les interpréteurs
  • 19. JavaScript !== C# Règles de portée (scoping) Utilisation de Patterns type Module pour éviter de polluer la portée globale « traction » des variables et fonctions (hoisting) Les valeurs « presque fausses » (false-y values) Opérateurs de comparaison Déclaration des tableaux & objets Utilisation du for … in (indice: pas comme en C#) Utilisation des Closures …
  • 20. scoping function mange() {// Code incorrect!    var quoi = "un mars",         jaiFaim = true;        if ( jaiFaim ) {        // En C#, timeToWaitn’est accessible que dans ce if; pas en JavaScript!        var timeToWait = 10;                console.log( "Attendre " + timeToWait + " minutes" );                mache();    }        function mache() {        var comment = "ma bouche";                // Cette fonction a accès à timeToWait car elle est en fait dans        // le périmètre de la fonction eat()        console.log( "Après " + timeToWait +             " minutes, je mange " + quoi + " avec " + comment );    }}mange();// Attendre 10 minutes// Après 10 minutes, je mange un mars avec ma bouche Awful Part
  • 21. scoping // Code correctfunction mange() {    var quoi = "un mars",         jaiFaim = true,        timeToWait, bodyPart;        if ( jaiFaim ) {        timeToWait = 10;                console.log( "Attendre " + timeToWait + " minutes" );                mache();    }        function mache() {        var comment = "ma bouche";                console.log( "Après " + timeToWait +             " minutes, je mange " + quoi +             " avec " + comment );    }}mange();// Attendre 10 minutes// Après 10 minutes, je mange un mars avec ma bouche
  • 22. hoisting console.log( someVariable ); //undefinedvar someVariable = 42; //Global variableconsole.log( someVariable ); // 42function doSomething() {    console.log( someVariable ); // undefined    //Pourquoi undefined??    someVariable = 1    console.log( someVariable ); // 1        console.log( window.someVariable ); // 42    //Pourquoi 42?        if ( false ) {        var someVariable = 0;    }}doSomething();
  • 23. hoisting var someVariable = undefined;console.log( someVariable ); //undefinedsomeVariable = 42; //Global variableconsole.log( someVariable ); // 42function doSomething() {    //Le hoisting amène le var en haut de la fonction,     //et l’initialise à undefined !    var someVariable = undefined;    console.log( someVariable ); // undefined    someVariable = 1    console.log( someVariable ); // 1    //Cette ligne de code n’accède pas à la var globale,    //mais à la locale qui a été « tractée »    console.log( window.someVariable ); // 42    if ( false ) {        someVariable = 0;    }}doSomething();
  • 24. false-y values false null undefined "" (empty string) 0 NaN (not a number) Awful Part
  • 25. comparaisons console.log(0=='');//true console.log(0=='0');//true console.log(false=='0');//true console.log(null==undefined);//true console.log(0==' ');//true
  • 26. comparaisons console.log(0==='');//false console.log(0==='0');//false console.log(false==='0');//false console.log(null===undefined); //false console.log(0===' ');//false
  • 27. tableaux & objets var person={ firstName:"Thomas", lastName:"Conté", sayFullName:function(){ console.log(this.firstName+" "+ this.lastName); } }, keys=["123","676","242","4e3"];
  • 28. objets & prototypes function Car(model, year, miles) {   this.model = model;   this.year  = year;   this.miles = miles;} /* On utilise Object.prototype.newMethod et pas Object.prototype sinon l'on redéfinit le prototype!*/Car.prototype.toString = function() {        return this.model + " has done " +         this.miles + " miles";};  var civic = new Car("Honda Civic", 2009, 20000);var mondeo = new Car("Ford Mondeo", 2010, 5000); console.log(civic.toString());
  • 29. for … in var myArray = [], name;myArray[5] = "test";console.log( myArray.length ); //6Array.prototype.someVariable = "pourquoi?";for ( name in myArray ) {    console.log( name, myArray[name] );     //Outputs...     //   5, test    //   someVariable, pourquoi ?}
  • 30. var myArray = [], name;myArray[5] = "test";console.log( myArray.length ); //6for ( var i = 0, length = myArray.length; i < length; i++ ) {    console.log( i, myArray[i] );     //Outputs...    //   0, undefined    //   1, undefined    //   2, undefined    //   3, undefined    //   4, undefined    //   5, test } for … in
  • 31. for … in var Person = function( firstName, lastName ) {  this.firstName = firstName;  this.lastName = lastName;  return this;};Person.prototype = {  isMarried : false,  hasKids: false};var john = new Person( "John", "Smith" ),  linda = new Person( "Linda", "Davis" ),  name;john.isMarried = true; console.log( "sans vérifier hasOwnProperty" );for ( name in john ) {  console.log( name + ": " + john[name] );   //Outputs  //  firstName: John   //  lastName: Smith  //  isMarried: true  //  hasKids: false}console.log( "en vérifiant hasOwnProperty" );for ( name in linda ) {  if ( linda.hasOwnProperty(name) ) {    console.log( name + ": " + linda[name] );     //Outputs    //  firstName: Linda    //  lastName: Davis  }}
  • 32. closures /* “Une closure est un type d'objet particulier qui combine deux éléments: une fonction, et l'environnement dans lequel cette fonction a été créée. L'environnement contient toutes les variables locales qui étaient dans le périmètre au moment de la création de la closure.” -- https://developer.mozilla.org/en/JavaScript/Guide/Closures */function makeAdder( x ) {    return function( y ) {        return x + y;    };}var add5 = makeAdder( 5 );var add10 = makeAdder( 10 );console.log( add5(2) ); // 7console.log( add10(2) ); // 12
  • 33. closures for (var i = 0; i < 10; i++) {  document.getElementById('box' + i).onclick = function() {    alert('You clicked on box #' + i);  };} pas marche! for (var i = 0; i < 10; i++) {  document.getElementById('box'+i).onclick = (function(index){    return function() {      alert('You clicked on box #' + index);    };  })(i);} marche!
  • 34. module var testModule = (function(){    var counter = 0;    return {        incrementCounter: function() {            return counter++;        },        resetCounter: function() {            console.log('counterwas:' + counter);            counter = 0        }    }})(); /*test*/testModule.incrementCounter();testModule.resetCounter();
  • 37. Les apports d’ECMAScript 5 Énormément de « petits » changements pour rendre le langage plus cohérent « strict mode » La plus importante nouveauté d’après Crockford Supporté à partir de IE10 Modifications de la syntaxe JSON Nouvelles méthodes: tableaux, dates… Modèle objet amélioré Object.create, Object.keys … Getters & Setters Meta Object API …
  • 38. Strict Mode Activé en ajoutant la chaîne magique: ‘use strict’; Ignorée par les précédents interpréteurs Périmètre fichier ou fonction (recommandé) Plus de variables globales implicites this n’est plus relié au scope global dans un appel de fonction  plus de pollution accidentelle Et bien d’autres mesures de sécurité Recommandation: utiliser Strict Mode par défaut dès aujourd’hui
  • 41. Script# Projet de Nikhil Kothari, aujourd'hui Partner Engineer chez Microsoft: http://projects.nikhilk.net/ScriptSharp Utilisé en interne par Microsoft Office Web Applications / SharePoint Office Web Services Bing : Maps, Mobile Windows Live Script# permet de compiler du C# en JavaScript On gagne la productivité des outils .NET, Visual Studio Particulièrement intéressant sur de grosses applications Focalisé sur la production d’applications JavaScript optimales (plus que sur le portage d’applications .NET)
  • 42. Knockout.JS Projet de Steve Sanderdon, PM Web Tools chez Microsoft http://knockoutjs.com/ Permet d’utiliser le pattern MVVM pour développer des interfaces utilisateur HTML / JavaScript Implémente le pattern Observable Bindingbi-directionnel Fournit un système de templating permettant de générer l’interface à partir du ViewModel Exemples: http://knockoutjs.com/examples/
  • 43. RxJS Projet mené par l'équipe Rx chez Microsoft http://msdn.microsoft.com/en-us/data/gg577609 Framework d’Event Processing, existe aussi pour .NET Particulièrement adapté à la nature asynchrone de JavaScript Basé sur deux notions principales: Observable Sequences Observers Sources de Séquences : Timers, DOM, AJAX, … ou custom Projections : .Select() Composition: .Throttle(), .DistinctUntilChanged(), …
  • 44. RxJS varinput = $("#searchInput"); varwords = input.toObservable("keyup") .Select(function(x) { returninput.val(); }) .Throttle(500) .DistinctUntilChanged() .Select(function(term) { return search(term); }) .Switch(); words.Subscribe(function(data) { $("#results").empty(); $.each(data, function(index, value) { $("#results").append("<li>" + value + "</li>"); }); });
  • 45. JavaScript sur le serveur
  • 46. Node.JS Node.JS est développé par Ryan Dahl chez Joyent C’est un framework permettant de développer des services haute performances sur un modèle asynchrone L’idée étant que le modèle asynchrone est plus performant et plus efficace que le classique modèle multithreadé quand on a beaucoup d’entrées-sorties à gérer Semblable dans le principe à l’Async CTP JavaScript choisi car particulièrement adapté au développement asynchrone grâce à ses forts aspects fonctionnels Le framework intègre le protocole HTTP en standard ainsi qu’une librairie système entièrement asynchrone
  • 47. Hello Node varhttp = require('http'),   mysql= (new (require('mysql').Client)({user: 'root'})); mysql.connect(); mysql.query('use castle;'); http.createServer(function (req, res) {   res.writeHead(200, {'Content-Type': 'text/json'}); mysql.query('select * from dragons', function (e, d) {   if (e) {      res.end('ERROR'); } else { res.end(JSON.stringify(d)); } }); }).listen(8124, '127.0.0.1'); console.log('Server running at http://127.0.0.1:8124/');
  • 48. Node.JS dans Windows Azure Microsoft aide officiellement Ryan Dahl à porter Node.JS sur Windows Node est constitué d’un seul exécutable, node.exe, donc très simple à inclure dans un WorkerRole
  • 49. Démo Node.JS sur Windows Azure
  • 50. Conclusion JavaScript est aujourd’hui l’un des langages de programmation les plus populaires Ses performances en font un environnement d’exécution de premier ordre, dans le navigateur et même sur le serveur Microsoft investit pour faire de JavaScript un langage de premier ordre sur sa plateforme: Performances: IE9, IE10 Respect des standards: ECMAScript 5 Outils de développement: F12, Dev11 Frameworks … et plus encore à venir!
  • 51. Brendan Eich, CapitolJS : http://www.slideshare.net/BrendanEich/capitol-js
  • 52. Ressources! Essential JavaScript Patterns AddyOsmani JavaScript Patterns StoyanStefanov Eloquent JavaScript MarijnHaverbeke ECMA-262, Edition 5 ECMA International JavaScript: the Good Parts Douglas Crockford

Hinweis der Redaktion

  1. L&apos;idée est de faire un point sur JavaScript, ses origines et son actualité, vu de la perspective d&apos;un développeur Microsoft. Cette présentation est essentiellement destinée aux développeurs .NET qui auraient le sentiment d&apos;avoir un peu lâché JavaScript, et qui voudraient se remettre dans le bain. Microsoft, il faut bien le dire, n&apos;a pas particulièrement mis en avant JavaScript ces dernières années, et a même fourni beaucoup d&apos;outils dans ASP.NET permettant de s&apos;en affranchir en grande partie, ainsi bien entendu que des alternatives comme Silverlight permettant de créer des RIA.Mais cela ne veut pas dire que Microsoft est inactif sur JavaScript, bien au contraire, et cette session a pour but de faire un tour d&apos;horizon de JavaScript chez MS.
  2. Voilà une idée qui circule; ce n&apos;est peut-être pas la meilleure analogie, mais ce sont les points qui l&apos;ont inspiré. L&apos;on pourrait donc dire que JavaScript est devenu en quelque sorte la VM (Machine Virtuelle) pour le Web: c&apos;est l&apos;environnement dans lequel les applications vont s&apos;exécuter. Il y a donc une tendance forte depuis quelques années à en améliorer ses performances, y ajouter des frameworks pour en permettre l&apos;industrialisation, voire même créer des &quot;compilateurs&quot; permettant de passer d&apos;un langage de plus haut niveau vers JavaScript. Enfin, cette nouvelle ubiquité de JavaScript le pousse même à se développer côté serveur.
  3. Microsoft s&apos;est concentré sur l&apos;idée d&apos;améliorer les performances de JavaScript dans le monde réel, plutôt que de se focaliser sur des tests de performances quelque peu théoriques.
  4. c.f. la démo DEV209/TR12 : « Hybrid », IE8 vs. IE9
  5. Avec clubic.com pour le débogueur JavaScript
  6. console.log()var script = document.createElement(&apos;script&apos;);script.src = &apos;http://code.jquery.com/jquery-latest.min.js&apos;;document.body.appendChild(script);Script tabDebugInsert breakpoint« Format JavaScript »WatchType nameHover over variableStep codeContinue on exceptionCall stacksProfilerAlso DOM calls
  7. Pour les développeurs C#, et même tous les développeurs utilisant des langages &quot;traditionnels&quot; comme C++ ou Java, JavaScript recèle de nombreux écueils. En voici quelques-uns.Au final, l&apos;important est de ne pas se laisser berner par la syntaxe JavaScript, qui ressemble effectivement à la famille &quot;C/C++/Java/C#&quot;. Il s&apos;agit en réalité d&apos;un langage très différent.
  8. test262.ecmascript.org ?DEV209 : data &amp; accessorpropertiesIE10 : strict mode
  9. Comment se faciliter la vie dès aujourd&apos;hui quand on veut développer en JavaScript pour viser l&apos;énorme base installée des navigateurs? Les frameworks à la rescousse!Je vais ici m&apos;attarder sur un certain nombre de frameworks auxquels Microsoft participe activement, ou qui sont particulièrement intéressants pour des développeurs .NET.L&apos;on aurait pu également parler de jQuery (un sujet à part entière!) auquel Microsoft participe activement. Ou bien de CoffeeScript.
  10. 100% Script# + HTML5-based Gamehttp://ventajou.com/spacedinos/https://github.com/Ventajou/Space-Dinosaurs
  11. http://nullzzz.blogspot.com/2011/02/game-programming-with-rx-js.html
  12. L&apos;idée de faire tourner JavaScript sur le serveur ne date pas d&apos;hier, et date même des débuts de JavaScript! L&apos;idée générale est la suivante: JavaScript est incontournable sur le &quot;front-end&quot;, alors pourquoi ne pas réutiliser les compétences des développeurs pour leur permettre de développer également pour le &quot;back-end&quot;? C&apos;est en quelque sorte le chemin inverse de Microsoft, qui avec Silverlight par exemple permet aux développeurs &quot;back-end&quot; ASP.NET de réutiliser leurs compétences sur le &quot;front-end&quot;...
  13. L&apos;auteur de Node.JS a vu dans le langage une plateforme idéale pour mettre en oeuvre un serveur dédiée aux entrées-sorties hautes performances asynchrones.Quels cas d&apos;usage? Le Web bien sûr, même si l&apos;architecture de Node.JS paraisse un peu extrême par rapport au trafic typiquement servi par un serveur HTTP classique. Mais surtout tous les échanges de messages effectués dans un cadre &quot;temps réel&quot; : serveurs de discussions (&quot;tchat&apos;&quot;), jeux en réseaux, jeux sociaux, traitement de flux de données, diagnostics temps réel, tableaux de bord, etc.
  14. Node.JS est né dans le monde Linux, mais est activement en cours de portage vers Windows, avec le soutien de Microsoft. Il se trouve que Windows dispose en effet d&apos;un mécanisme d&apos;I/O asynchrone natif nommé XXXXX, bien différent des API POSIX, mais qui permettra un portage natif de qualité.L&apos;un des objectifs est bien entendu de pouvoir faire tourner Node.JS facilement sur Windows Azure, afin de bénéficier des apports de l&apos;approche Platform As A Service, étendus au monde Node.JS.