mozilla
Vos résultats de recherche

    SharedWorker

    L'interface SharedWorker représente un type spécifique de worker qui peut être accédé à partir de plusieurs contextes de navigation, tels que plusieurs fenêtres, iframes ou même workers. Ils implémentent une autre interface que les workers dédiés et ont un contexte global différent, SharedWorkerGlobalScope.

    Remarque : si un SharedWorker peut être accédé à partir de plusieurs contextes de navigation, tous ces contextes de navigation doivent partager exactement la même origine (même protocole, hôte et port.)

    Propriétés

    Il hérite des propriétés de son parent, EventTarget, et implémente les propriétés de AbstractWorker.

    AbstractWorker.onerror
    Est un EventListener qui est appelé à chaque fois qu'un ErrorEvent de type error se propage à travers le worker.
    SharedWorker.port Lecture seule
    Retourne un objet MessagePort utilisé pour communiquer et contrôler le worker partagé.

    Constructeurs

    SharedWorker()
    Crée un web worker partagé qui exécute le script spécifié par l'URL.

    Méthodes

    Hérite des méthodes de son parent, EventTarget, et implémente les méthodes de AbstractWorker.

    Exemple

    Dans notre  Exemple basique d'un worker partagé (lancer le worker partagé), nous avons deux pages HTML, qui chacune utilise du code JavaScript pour réaliser un calcul simple. Les différents scripts utilisent le même worker pour effectuer ce calcul — ils peuvent tous les deux y accéder, même si leurs pages s'exécutent à l'intérieur de fenêtres différentes.

    L'extrait de code suivant illustre la création d'un objet SharedWorker en utilisant le constructeur SharedWorker(). Les deux scripts contiennent ceci :

    var myWorker = new SharedWorker("worker.js");
     

    Les deux scripts accèdent alors au worker à travers un objet MessagePort créé en utilisant la propriété SharedWorker.port — le port est démarré au moyen de sa méthode start() :

    myWorker.port.start();
     

    Lorsque le port est démarré, les deux scripts poste des messages au worker et gère les messages qu'il renvoie en utilisant respectivement port.postMessage() et port.onmessage :

    first.onchange = function() {
        myWorker.port.postMessage([first.value,second.value]);
        console.log('Message posted to worker');
      }
    
      second.onchange = function() {
        myWorker.port.postMessage([first.value,second.value]);
        console.log('Message posted to worker');
      }
    
      myWorker.port.onmessage = function(e) {
        result1.textContent = e.data;
        console.log('Message received from worker');
      }

    Au sein du worker, nous utilisons le gestionnaire SharedWorkerGlobalScope.onconnect pour se connecter au même port dont il a été question plus haut. Les ports associés au worker sont accessibles dans la propriété ports de l'événement connect — nous utilisons alors la méthode MessagePort start() pour démarrer le port, et le gestionnaire onmessage pour s'occuper des messages en provenance des threads principaux.

    onconnect = function(e) {
        var port = e.ports[0];
    
        port.onmessage = function(e) {
          var workerResult = 'Result: ' + (e.data[0] * e.data[1]);
          port.postMessage(workerResult);
        }
    
        port.start();
    }

    Spécifications

    Spécification Statut Commentaire
    WHATWG HTML Living Standard
    La définition de 'SharedWorker' dans cette spécification.
    Living Standard Aucune modification de Web Workers.
    Web Workers
    La définition de 'SharedWorker' dans cette spécification.
    Candidate Recommendation Définition initiale.

    Compatibilité des navigateurs

    Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Support 4 29.0 (29.0) Pas de support 10.60 5, mais plus supporté à partir de 6.1
    Fonctionnalité Android Chrome for Android Firefox Mobile (Gecko) Firefox OS (Gecko) IE Mobile Opera Mobile Safari Mobile
    Support Pas de support Pas de support 33.0 (33.0) 2.1 Pas de support 11.5 5.1, mais plus supporté à partir de 7.1

    Voir aussi

    Étiquettes et contributeurs liés au document

    Étiquettes : 
    Contributors to this page: FuturLiberta, jean-pierre.gay
    Dernière mise à jour par : jean-pierre.gay,