2017-12-31 104 views
7

Ich lerne über die JavaScript Web Worker-APIs, die Dokumentation des Mozilla Developer Network (MDN) als primäre Quelle verwenden. The documentation suggests, dass der Konstruktor für einen neuen Worker einen type Parameter akzeptiert. Dieser Parameter type kann nach demselben Dokument Werte von classic oder module annehmen.Was ist der Unterschied zwischen einem "klassischen" und "modularen" Web Worker?

Leider beschreibt die Dokumentation nicht den Unterschied zwischen classic und module. Wann möchte ich classic vs. module verwenden und welche Verhaltensunterschiede gibt es zwischen den beiden "Typen" der Arbeiter?

Antwort

4

Der Typ module dient ungefähr dem gleichen Zweck wie der type="module" attribute does for a script tag. Es teilt dem Browser mit, dass das Worker-Skript, das geladen wird, ein ES6-Modul ist (das sind die notwendigen Metadaten, um zu wissen, wie man es analysiert und ausführt, as this article goes into a bit).

Sie würden es verwenden, wenn Ihr Worker-Modul ein ES6-Modul wäre (möglicherweise mit import-Anweisungen). Es hat auch den Vorteil, einen Arbeiter von einem anderen Ursprung laden zu können, wenn CORS aktiviert ist, was klassische Arbeiter nicht können (was ein attraktives Merkmal sein könnte, selbst wenn keine import Anweisungen verwendet werden).

Von HTML Living Standard - Using a JavaScript module as a worker:

Alle unsere Beispiele zeigen bisher Arbeiter, die klassische Skripte ausgeführt. Arbeiter können stattdessen mit Modul-Skripts instanziiert werden, die die üblichen Vorteile haben: die Fähigkeit, die JavaScript-Importanweisung zu verwenden, um andere Module zu importieren; strenger Modus standardmäßig; und Erklärungen auf höchster Ebene, die den globalen Geltungsbereich des Arbeiters nicht beeinträchtigen.

Beachten Sie, dass solche modulbasierten Worker im Vergleich zu klassischen Arbeitern anderen Einschränkungen hinsichtlich des ursprungsübergreifenden Inhalts unterliegen. Im Gegensatz zu klassischen Arbeitern können Modularbeiter mit einem ursprungsübergreifenden Skript instanziiert werden, solange dieses Skript mit dem CORS-Protokoll verfügbar gemacht wird. Außerdem wird die importScripts() -Methode innerhalb von Modul-Workern automatisch fehlschlagen. Die JavaScript-Importanweisung ist im Allgemeinen eine bessere Wahl.

Ab heute würden Sie wahrscheinlich nicht in der Produktion als Browser-Unterstützung für ES6-Module verwenden, ist nicht so toll.

Verwandte Themen