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

JavaScript Discussion :

window.unload : limitations ?


Sujet :

JavaScript

  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut window.unload : limitations ?
    Bonjour,

    J'ai un client qui me pose un problème de "verrouillage" de lignes dans une base.

    Pour faire simple :

    Quand un utilisateur charge des lignes à l'écran, il faudrait que ces lignes ne soient pas visibles pour les autres.

    J'ai pensé faire une usine à gaz genre :

    onload = ajax qui va flagger dans la base chaque ligne affichée à l'écran
    onunload = ajax qui va déflagger dans la base chaque ligne affichée

    Le souci, c'est que se passe-t-il si le script "onunload" met 3 plombes à s'exécuter ? il s'interrompt de lui-même ? bloque le navigateur ? tourne en tâche de fond ?

    Plus tous les cas tordus où l'utilisateur va planter et/ou fermer sauvagement son navigateur, ou perdre la connexion internet...

    Bonne pratique ou pas ?

    Sinon, j'ai une autre idée, peut-être encore pire :
    - onload puis toutes les 60 secondes : mettre à jour les lignes visibles à l'écran avec l'heure actuelle + utilisateur connecté
    - au chargement, vérifier qu'aucune ligne n'a été flaggée avec un autre utilisateur depuis moins de 60 secondes.

    J'me fait peur des fois pour imaginer des trucs pareils...

    De meilleures idées ?

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    pas d'ajax sur unload

    Ajax est un appel asynchrone donc le traitement à de très forte chance d'être interrompu vu que un load va le déclencher et quitter la page sans attendre.

    le seul moyen efficace de traiter ce genre de chose et de le faire côté serveur avec un timeout

    lorsque l'utilisateur quitte la page il est renvoyé vers un page qui libère les ressources
    si l'utilisateur ne quitte pas proprement le timeout est là pour libérer les ressources

    si l'utilisateur reste inactif trop longtemps et qui agit sur les donnée alors que côté serveur les donné ont été libéré il faut interrompre le traitement lui signaler que le timeout est dépassé et lui proposer de charger les nouvelles données si elle sont disponibles.

    mais plutôt que de réserver (locker) les données, en général on les dates. ainsi lorsque l'utilisateur les demande on garde la date de la demande dans l'espace de l'utilisateur.
    au moment de les traiter on vérifie que la date des données est inférieure à la date de demande de l'utilisateur.
    si c'est le cas on peut les traiter sinon cela signifie qu'un autre utilisateur les a modifiés
    dans ce cas on propose à l'utilisateur d'utiliser la dernière version.

    Ainsi il n'y a pas de donnée réservées mais uniquement des données partagées.

    A+JYT

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    Ajax est un appel asynchrone donc le traitement à de très forte chance d'être interrompu vu que un load va le déclencher et quitter la page sans attendre.
    On peut tout à fait faire de l'ajax synchrone... On a qu'à appeler ça du bjax pour "blocking" s'il y en a qui aiment pas l'oxymore "ajax synchrone."
    Par contre, bien que mes navigateurs acceptent d'honorer ce genre d'appel même dans des contraintes assez rudes, je n'espérerais pas trop que ça marche tout le temps. Genre à une époque unload avait le droit d'ouvrir des pop-ups et maintenant ce n'est plus le cas : on fait pas attendre l'utilisateur qui a décidé de partir. Vraisemblablement si le site ne répond pas assez vite à la requête synchrone, le navigateur ne devrais pas l'attendre longtemps avant de s'en aller sans l'honorer.

    Et il reste tous les cas où l'event ne peut pas être traité ou n'existe pas (cas nettement plus probable du gars qui a oublié qu'il a un onglet ouvert sur ces lignes.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [WinForms]limiter les instances d'une appli (calculatrice windows)
    Par khamett dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 23/11/2006, 12h50
  2. limite de RAM chez Windows
    Par moi1 dans le forum Windows XP
    Réponses: 2
    Dernier message: 13/10/2006, 17h21
  3. Limitation Windows 2Go
    Par zemerli dans le forum Oracle
    Réponses: 1
    Dernier message: 16/08/2006, 16h11
  4. Limite mémoire Windows XP Sp2
    Par DUBUIS dans le forum Windows
    Réponses: 2
    Dernier message: 07/07/2006, 11h58
  5. Limitation du nombre d'installation de Windows XP?
    Par larnicebafteur dans le forum Windows XP
    Réponses: 7
    Dernier message: 12/06/2006, 12h15

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