Le JavaScript et la 3D



Documents pareils
Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Document Object Model (DOM)

Tâches planifiées. Chapitre Introduction

Création d objet imbriqué sous PowerShell.

Devenez un véritable développeur web en 3 mois!

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Traduction des Langages : Le Compilateur Micro Java

Java 7 Les fondamentaux du langage Java

DOM - Document Object Model

SQL Server 2012 Administration d une base de données transactionnelle

TP JAVASCRIPT OMI4 TP5 SRC

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Programmation Web. Madalina Croitoru IUT Montpellier

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

HTML5, CSS3 et JavaScript Développez vos sites pour les terminaux mobiles

Editer un script de configuration automatique du proxy

Un jour, une question Réponse à une problématique issue de la liste GTA *

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

CREATION WEB DYNAMIQUE

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

HTML5. Développement d applications Web. Visual Studio 2015 et TFS. L art et la manière. avec. Philippe DIDIERGEORGES

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

GOL502 Industries de services

Stockage du fichier dans une table mysql:

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Business Intelligence

Initiation à html et à la création d'un site web

Le stockage local de données en HTML5

TP1. Outils Java Eléments de correction

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

as Architecture des Systèmes d Information

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Manuel d utilisation NETexcom

Didacticiel de mise à jour Web

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Introduction à MATLAB R

Cours Langage C/C++ Programmation modulaire

Programmation Objet - Cours II

ORACLE TUNING PACK 11G

PHP 5.4 Développez un site web dynamique et interactif

Héritage presque multiple en Java (1/2)

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Démonstration de la mise en cache via HTML 5 sur iphone

HTML. Notions générales

A. À propos des annuaires

Optimiser son référencement naturel avec e-majine

Note de synthèse. Développement web sur le CMS Prestashop. Stage du 17 mai au 25 juin Entreprise decoratzia.com 15 rue Erlanger Paris

Chapitre 2. Classes et objets

Géolocalisation. Remy Sharp

Chapitre 5 : Les procédures stockées PL/SQL

Google Webmaster Tools

Présentation du PL/SQL

A. Architecture du serveur Tomcat 6

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

Programmation par les Objets en Java

PROSOP : un système de gestion de bases de données prosopographiques

Google Tag Manager. «Vous ne verrez plus l'analytics de la même manière» par Ronan CHARDONNEAU

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

TeamViewer 9 Manuel Management Console

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

Notes de mise à jour. 4D v11 SQL Release 3 (11.3) Notes de mise à jour

MOTEUR DE WORKFLOW Mise en oeuvre d'openwfe Version septembre 2006

Google Tag Manager. Optimisez le tracking de votre site web. Google Tag Manager. Google Tag Manager. Optimisez le tracking de votre site web 26,50

Diagramme de classes

A. Introduction. Chapitre 7

Les outils actuels permettent-ils d automatiser la production de cartes? De quels outils dispose-t-on?

3W Academy Programme de Formation Développeur Intégrateur web Total : 400 heures

AWS avancé. Surveiller votre utilisation d EC2

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Chapitre 1 : Introduction aux bases de données

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

SQL Parser XML Xquery : Approche de détection des injections SQL

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Initiation à JAVA et à la programmation objet.

Bases de données cours 1

Dynamisez vos sites web avec Javascript!

PDO : PHP Data Object 1/13

MySQL. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

Télécom Nancy Année

Zope: une plateforme collaborative de développement web open source

GOL-502 Industrie de services. Travaux Pratique / Devoir #7

ECLIPSE ET PDT (Php development tools)

Module http MMS AllMySMS.com Manuel d intégration

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Transcription:

Chapitre 2 Le JavaScript et la 3D 1. Bien programmer avec JavaScript Le JavaScript et la 3D 1.1 Optimiser les performances Bien utilisé et avec les derniers navigateurs, JavaScript peut être seulement trois fois moins rapide que le C, ce qui est réellement exceptionnel pour un langage non compilé, peu typé et de haut niveau. Il faut cependant veiller à respecter des règles simples dont voici une liste non exhaustive. Éviter d'utiliser this En JavaScript, l'objet this peut signifier plusieurs choses, et il est déconseillé dans la syntaxe JSLint. var ma_classe=function() { this.attribut=0; this.ma_methode=function() { this.attribut=1; var mon_instance=new ma_classe(); mon_instance.ma_methode();

32 WebGL Guide de développement d applications web 3D alert(mon_instance.attribut); Le code suivant va retourner 1. En effet, lorsque ma_methode() est appelée, le this de this.attribut=1 se réfère à mon_instance. Maintenant, exécutons le code suivant : var mon_instance2=new ma_classe(); var methode=mon_instance2.ma_methode; eval("methode();"); alert(mon_instance2.attribut); Ce code va maintenant retourner 0. En effet, lorsque methode() est appelée, le this se réfère maintenant à la fonction methode() et non plus à l'instance mon_instance2. Les codes précédents pourraient avantageusement être remplacés par : var ma_classe=function() { var that={ attribut:0 ; that.ma_methode=function() { that.attribut=1; return that; var mon_instance=ma_classe(); mon_instance.ma_methode(); alert(mon_instance.attribut); var mon_instance2=ma_classe(); var methode=mon_instance2.ma_methode; eval("methode();"); alert(mon_instance.attribut); Dans ce dernier cas, les deux alertes affichent bien la valeur 1. Éviter d'utiliser du code en tant que chaîne de caractères Dès que le moteur JavaScript rencontre une fonction utilisant du code en tant que chaîne de caractères, il doit transformer celui-ci en code exécutable. C'est une opération pénalisante en termes de performances. Editions ENI - All rights reserved

Le JavaScript et la 3D Chapitre 2 33 Il faut donc éviter d'utiliser la fonction eval(), et remplacer autant que possible le code en tant que chaîne de caractères en code direct. Exemple avec settimeout() var ma_fonction=function() { console.log("10 secondes se sont écoulées"); settimeout("ma_fonction()", 10000); Dans cette séquence, la dernière instruction sera avantageusement remplacée par : settimeout(ma_fonction, 10000); Les tableaux et les objets Évitez de tester un attribut d'un objet s'il est absent. En effet, avant de retourner undefined, JavaScript va parcourir tous les attributs et les méthodes de l'objet. Même si JavaScript autorise d'indexer des tableaux avec d'autres éléments que des nombres entiers, il faut éviter. En effet, dans ce dernier cas, les tableaux sont considérés comme des objets et leur manipulation est beaucoup moins efficace que celle de tableaux numériques. Déclarez la taille de vos tableaux lors de leur déclaration en utilisant la fonction Array() : var mon_tableau=array(5); //pour un tableau à 5 éléments Pour parcourir un tableau numérique, la structure for-in est moins rapide qu'une simple boucle for. Il faut ainsi préférer : à for (var i=0; i<mon_tableau.length; i++) {,,, for (var i in mon_tableau) {,,,

34 WebGL Guide de développement d applications web 3D Remarque Pensez à la fonction native array.map(fonction) si vous devez parcourir un tableau. Elle sera plus rapide encore qu'une boucle for! Éviter les variables globales Il est nécessaire d'éviter autant que possible les variables globales. En effet, elles sont plus longues d'accès par le moteur JavaScript lorsque ce dernier exécute une portion de code local, et le garbage collector de JavaScript ne les nettoie pas, d'où un risque de fuites mémoire. De plus, avoir trop de variables globales nuit à la lisibilité du code et complexifie le débogage. Les conversions implicites Les conversions implicites sont souvent source d'erreurs. Ainsi 0, null ou "" peuvent implicitement être convertis en False. Nous vous conseillons d'utiliser au maximum les tests absolus qui vérifient aussi l'égalité des types, par exemple === à la place de =. Conseils divers Il faut éviter autant que possible le recours à la structure try-catchfinally, et les console.log(), pénalisants pour la performance. Utilisez au maximum les fonctions natives de JavaScript. Elles sont toujours plus rapides que leur équivalent reprogrammé. 1.2 L'héritage en JavaScript Le recours à la syntaxe JSLint permet de recréer aisément un héritage simple. Exemple d'héritage Considérons une classe Chat, qui hérite de la classe Animal. On prend pour la classe Animal : /* Animal Editions ENI - All rights reserved

Le JavaScript et la 3D Chapitre 2 35 spec.taille : taille de l'animal en mètres */ var Animal = (function () { return { instance : function (spec) { spec.taille=spec.taille 0; return { manger : function() {..., dormir : function() {..., get_taille : function() { return spec.taille ; ; ()); Pour créer un animal, il suffira d'appeler la méthode instance : var mamouth=animal.instance({taille : 9); mamouth.manger(); Créons une classe Chat héritant de la classe Animal et ajoutant une méthode, miauler : /* Chat */ var Chat = (function () { return { instance : function (spec) { var that=animal.instance({taille: 1) ; // (tous les chats font 1m de long) that.miauler=function() { alert("miaou"); return that; ; ());

36 WebGL Guide de développement d applications web 3D Pour créer une instance de Chat, le faire manger et le faire miauler, il suffit de lancer le code suivant : var mon_chat=chat.instance({); mon_chat.miauler(); mon_chat.manger(); 1.3 Structurer le code avec PHP Nous conseillons de placer chaque classe JavaScript dans un fichier portant le nom de la classe et ayant pour extension.js. Cela permet d'avoir un code clair et d'éviter les barres de défilement trop longues. De plus, si vous travaillez à plusieurs développeurs sur un même projet avec un gestionnaire de versions comme GIT ou Mercurial, vous aurez moins de conflits de fusion à gérer. Une méthode triviale pour regrouper les scripts serait d ajouter pour chaque classe une balise : <script type='text/javascript' src='ma_classe.js'></script> dans le code HTML de la page principale. Cependant, au niveau de l'optimisation du temps de chargement de la page, ce n'est pas optimal. En effet, le navigateur devra effectuer une requête indépendante pour chaque script. Il est préférable de regrouper les classes dans quelques fichiers PHP de la forme suivante : <? header("content-type: text/javascript"); include("ma_classe1.js"); include("ma_classe2.js"); include("ma_classe3.js");...?> et d'inclure le fichier PHP en tant que script dans le code HTML de la page principale : <script type='text/javascript' src='script.php'></script> Editions ENI - All rights reserved