223 votes

Que peuvent faire les travailleurs de service que les travailleurs web ne peuvent pas faire ?

Que peuvent faire les travailleurs de services que les travailleurs web ne peuvent pas faire ? Ou vice versa ?

Il semble que les travailleurs Web soient un sous-ensemble de la fonctionnalité des travailleurs de service. Est-ce exact ?

278voto

Ali Points 18740

La réponse de Buksy est correcte mais, à mon avis, elle ne répond pas à la question initiale, à savoir : "Que peuvent faire les travailleurs de services que les travailleurs web ne peuvent pas faire ? Ou vice versa ?"

Il existe des différences fondamentales dans leur cycle de vie et le nombre d'instances par origine que vous pouvez avoir. En bref :

               | Web Workers  | Service Workers  |
|--------------|--------------|------------------|
| Instances    | Many per tab | One for all tabs |
| Lifespan     | Same as tab  | Independent      |
| Intended use | Parallelism  | Offline support  |

La réponse de Buksy se trouve essentiellement à la dernière ligne du tableau. Crédit : J'ai pris ce tableau à partir de Démystifier les Web Workers et les Service Workers par Nolan Lawson, à partir de diapositive 35 .

En particulier, voici comment créer et arrêter les travailleurs web :

Utilisation de Web Workers

alors que les travailleurs du service ont leur propre cycle de vie, qui est, il est vrai, leur "partie la plus compliquée" :

Le cycle de vie du travailleur du service

Le cycle de vie est donc une différence fondamentale entre les deux (une conséquence de leur utilisation prévue).

Il y avait une énorme différence dans Support du navigateur : Les travailleurs de service n'étaient pas du tout disponibles dans Safari pour iOS jusqu'à la version 11.3 (2018 Mar 29), voir . Puis-je faire appel à des travailleurs sociaux ? En revanche, les travailleurs du web bénéficiaient déjà en 2012 d'une bien meilleure prise en charge des navigateurs : Puis-je utiliser des travailleurs web ?

Si vous devez supporter IE11, vous ne pouvez utiliser que des web workers : IE11 n'a pas de service workers, et apparemment l La fin de la prise en charge d'IE11 est fixée au 14 octobre, 2025 .

Il existe des différences subtiles dans leurs Support API à travers les navigateurs, voir Test du travailleur HTML5 (également par Nolan Lawson). Dans un navigateur particulier, un type de travailleur peut supporter un certain appel API alors que l'autre ne le fait pas. Visitez cette page et testez votre propre navigateur !

3 votes

Ce tableau l'explique très bien. La question originale serait probablement mieux formulée comme suit : "Quelle est la différence entre..."

2 votes

Que peuvent faire les travailleurs de service que les travailleurs web partagés ne peuvent pas faire ?

1 votes

Le tableau à lui seul devrait faire de cette réponse une réponse acceptée. Les définitions du manuel de l'autre réponse n'ont pas beaucoup de sens pour moi qui suis novice dans ces concepts.

208voto

Buksy Points 687

Il y a une grande différence dans ce à quoi ils sont destinés :

Travailleurs du Web

Les travailleurs Web constituent un moyen simple pour le contenu Web d'exécuter des scripts en arrière-plan. Le fil d'exécution du travailleur peut effectuer des tâches sans sans interférer avec l'interface utilisateur. En outre, il peut effectuer des E/S à l'aide de XMLHttpRequest (bien que les attributs responseXML et channel sont toujours nuls). Une fois créé, un travailleur peut envoyer des messages au code JavaScript qui l'a créé en postant des messages. JavaScript qui l'a créé en envoyant des messages à un gestionnaire d'événements spécifié par ce code (et vice versa).

Source - Utilisation de Web Workers

Travailleur de service

Les travailleurs de service agissent essentiellement comme des serveurs mandataires qui se situent entre les applications Web, le navigateur et le réseau (lorsqu'ils sont disponibles). et le navigateur et le réseau (si disponible). Ils sont Ils ont pour but (entre autres) de permettre la création d'expériences efficaces hors ligne, en interceptant les requêtes du réseau et en prenant les intercepter les demandes du réseau et prendre les mesures appropriées en fonction de la disponibilité du réseau et de la présence de ressources mises à jour sur le serveur. les actifs mis à jour résident sur le serveur. Ils permettront également l'accès à notifications push et aux API de synchronisation en arrière-plan.

Source - API Service Worker

Les Web Workers sont donc pratiques pour exécuter des scripts coûteux sans provoquer le blocage de l'interface utilisateur, tandis que les Service Workers sont utiles pour modifier la réponse aux demandes du réseau (par exemple, lors de la création d'une application hors ligne).

11 votes

Que peuvent faire les travailleurs de service que les travailleurs web ne peuvent pas faire ?

1 votes

@Pacerier lisez la deuxième citation et le dernier paragraphe pour répondre à votre question.

5 votes

Je suis d'accord avec Pacerier, cela ne répond pas à la question. Je dis seulement ce que l'un fait et ce que l'autre fait. Un lecteur peut en tirer une conclusion, mais une bonne réponse devrait clarifier, voire confirmer ou infirmer la conclusion du lecteur.

31voto

sanket naik Points 118

Travailleurs de service

enter image description here

Les travailleurs de service sont un proxy entre le navigateur et le réseau. En interceptant les demandes faites par le document, les travailleurs de service peuvent rediriger les demandes vers un cache, permettant un accès hors ligne.

/* main.js */

navigator.serviceWorker.register('/service-worker.js');

/* service-worker.js */

// Install 
self.addEventListener('install', function(event) {
    // ...
});

// Activate 
self.addEventListener('activate', function(event) {
    // ...
});

// Listen for network requests from the main document
self.addEventListener('fetch', function(event) {
    // ...
});

Travailleurs du Web

enter image description here

Les Web workers sont des scripts à usage général qui permettent de décharger le thread principal des tâches exigeantes en termes de processeur.

/* main.js */

// Create worker
const myWorker = new Worker('worker.js');

// Send message to worker
myWorker.postMessage('Hello!');

// Receive message from worker
myWorker.onmessage = function(e) {
  console.log(e.data);
}

Poste original Ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X