IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] javascript en mémoire des pages chargées en ajax


Sujet :

AJAX

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Par défaut [AJAX] javascript en mémoire des pages chargées en ajax
    Bonjour tout le monde,

    J'ai une application entierement en ajax. Après le chargement initial, toute nouvelle page est chargée en ajax, puis injectée dans l'html existant.

    Je me demande comment se comportent les navigateurs vis à vis du javascript contenu dans le html que j'injecte à la page.
    Est-ce que le javascript est chargé en mémoire autant de fois que la page est chargée ? Si oui, est-ce que cela peut poser probleme ? (limitation mémoire, ralentissement du navigateur... ? )

    Merci de vos réponses

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Salut.

    Citation Envoyé par astec37 Voir le message
    J'ai une application entierement en ajax. Après le chargement initial, toute nouvelle page est chargée en ajax, puis injectée dans l'html existant.
    C'est une mauvaise utilisation d'Ajax généralement non recommandée...
    Je me demande comment se comportent les navigateurs vis à vis du javascript contenu dans le html que j'injecte à la page.
    Est-ce que le javascript est chargé en mémoire autant de fois que la page est chargée ? Si oui, est-ce que cela peut poser probleme ? (limitation mémoire, ralentissement du navigateur... ? )
    Logiquement, c'est plus simple que ça, il n'est tout bonnement pas interprété
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Par défaut
    Le javascript est evalué avant d'être injecté.
    Des fonctions contenues dans la page chargée en ajax sont bien exécutées, preuve que le js est interpreté.

    Pour le tout ajax, je sais que ce n'est pas l'idéal, mais dans mon cas c'est plus agréable à l'utilisation comme cela.

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Alors oui, il est chargé autant de fois que la page est chargée. La seule chose est que si tuas des noms de variables, objets, fonctions etc. identiques, chaque définition écrase la précédente (attention aussi aux risques importants de fuite de mémoire).
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Par défaut
    Effectivement, j'ai pu constater que les anciennes définitions étaient écrasées par les nouvelles.
    Tu parles de risques important de fuite de mémoire, est-ce que tu peux détailler un petit peu stp, c'est justement sur ce point que je m'interroge.

    Merci pour tes réponses.

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par astec37 Voir le message
    Tu parles de risques important de fuite de mémoire, est-ce que tu peux détailler un petit peu stp, c'est justement sur ce point que je m'interroge.
    Bien sûr

    Les fuites de mémoire sont dues à des références croisées dans des objets, des fonctions etc.
    En gros, imagine un élément HTML (donc un objet JavaScript) en interne, cet élément possède un gestionnaire d'événement qui appelle une fonction. Logiquement, dès que l'objet disparait, la référence disparait aussi, le lien entre les deux étant coupé, le compilateur JavaScript fait le ménage. Cela s'appelle un garbage collector.
    Le problème, c'est que quand la fonction fait elle-même référence à l'élément qui l'a appelée (ce qui bien évidemment arrive souvent), là le lien n'est coupé que si tu arrives à déterminer qu'il n'existe plus de référence ni à l'un ni à l'autre.
    En général, les navigateurs arrivent bien à se débrouiller avec ces références croisée, mais IE en particulier a plus de mal, parce que contrairement aux autres, il utilise deux garbage collectors distincts pour le JavaScript natif et le DOM. Il a donc beaucoup de mal à délier les objets du DOM aux objets JavaScript natifs.
    Donc, quand tu fais une navigation "full Ajax", tu es plus susceptibles de conserver des références à des objets n'existant plus (surtout si tu écrases en plus des objets exisatants) qu'en navigation "classique".

    Ceci dit, il est aussi important de savoir que les fuites de mémoire générées sont persistantes d'une page à l'autre. En effet, les données (au sens JavaScript) d'une page sont perdues quand tu vas sur une autre page, mais le compilateur reste le même et conserve ses fuites de mémoire !

    Bon, je suis pas sûr d'avoir été très clair, mais c'est un début d'explication.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Par défaut
    Merci de cette réponse. J'avoue ne pas avoir tout compris en détails, mais j'ai bien saisi l'idée quand même

    Est-ce que c'est possible en JS de supprimer une fonction de la mémoire, de la même maniere qu'on supprime un objet ou une variable ?

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Oui, il existe l'instruction delete en JavaScript mais elle n'est pas recommandée. Le mieux est d'affecter sa valeur à null ou undefined :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function affiche(texte){
        alert(texte);
    }
    affiche = null;
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Par défaut
    Bien, merci pour toutes ces réponses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Obtenir les informations d'une page chargée en AJAX d'un site exterieur
    Par roro59650 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/07/2009, 17h43
  2. [AJAX] Champ suggestion et portion de page chargé par ajax
    Par VinceMD dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 09/03/2009, 18h54
  3. [AJAX] Appel d'une fonction javascript dans une page chargée en ajax
    Par baedal dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 17/04/2008, 17h03
  4. [AJAX] Enregistrer les traces des pages consultées hors ligne
    Par AprilD dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/03/2008, 17h15
  5. [AJAX] Accès fonctions déclarées dans page chargée par Ajax
    Par yagrasdemonde dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 04/02/2008, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo