2017-12-31 164 views
7

Mozilla Developer Network(MDN)のドキュメントを主なソースとして使用して、JavaScript Web Worker APIについて学習しています。 The documentation suggests新しいワーカーのコンストラクタがtypeパラメータを受け入れること。このtypeパラメータは、同じ文書に従ってclassicまたはmoduleのいずれかの値を受け入れることができます。"古典的" Webワーカーと "モジュール" Webワーカーの違いは何ですか?

ドキュメントには、classicmoduleの違いは記載されていません。いつclassicmoduleを使用したいのですが、どのような行動上の違いが労働者の2つの「タイプ」間にありますか?

答えて

4

moduleタイプは、type="module" attribute does for a script tagとほぼ同じ目的を果たします。これはブラウザに、読み込まれているワーカースクリプトがES6モジュール(解析および実行方法を知るために必要なメタデータ、as this article goes into a bit)であることを伝えます。

ワーカーモジュールがES6モジュール(おそらくimportステートメント)の場合に使用します。 CORSが有効になっていれば、別の起源のワーカーをロードすることができるという特典もあります(古典的なワーカーはできません)。importステートメントを使用していなくても魅力的な機能です。 HTML Living Standard - Using a JavaScript module as a workerから

私たちの例のすべての古典的なスクリプトを実行し、これまでのショーの労働者。代わりに、作業者はモジュールスクリプトを使用してインスタンス化することができます。これには通常の利点があります.JavaScriptインポートステートメントを使用して他のモジュールをインポートする機能。 strictモード。作業者のグローバルスコープを汚染しない最上位レベルの宣言が含まれます。

このようなモジュールベースのワーカーは、古典的なワーカーと比較して、クロスオリジンのコンテンツに関するさまざまな制限に従います。従来のワーカーとは異なり、モジュール・ワーカーは、CORSプロトコルを使用してスクリプトが公開されている限り、クロス・オリジン・スクリプトを使用してインスタンス化できます。さらに、importScripts()メソッドはモジュールワーカー内部で自動的に失敗します。 JavaScriptのimportステートメントが一般に良い選択肢です。

今日の時点では、ES6モジュールのブラウザサポートはそれほど大きくないので、実際には本番では使用しないでしょう。

関連する問題