<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> <cite xml:lang="en-GB-x-hixie">HTML Standard</cite> (<time>2015-05-06 10:42:35 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#dom-workerglobalscope-close">https://html.spec.whatwg.org/#dom-workerglobalscope-close</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="202" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[202]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2016-12-06 07:17:59 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#worker-event-loop">https://html.spec.whatwg.org/#worker-event-loop</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> <cite xml:lang="en-GB-x-hixie">HTML Standard</cite> (<time>2015-05-06 10:42:35 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#run-a-worker">https://html.spec.whatwg.org/#run-a-worker</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="78" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[78]</anchor-end> <cite xml:lang="en-GB-x-hixie">HTML Standard</cite> (<time>2015-05-06 10:42:35 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#terminate-a-worker">https://html.spec.whatwg.org/#terminate-a-worker</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="95" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[95]</anchor-end> <cite xml:lang="en-GB-x-hixie">HTML Standard</cite> (<time>2015-05-06 10:42:35 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#dom-worker-terminate">https://html.spec.whatwg.org/#dom-worker-terminate</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <cite xml:lang="en">Service Workers Nightly</cite> (<time>2017-02-16 20:10:49 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://w3c.github.io/ServiceWorker/#service-worker-lifetime">https://w3c.github.io/ServiceWorker/#service-worker-lifetime</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <cite xml:lang="en">Service Workers Nightly</cite> (<time>2017-03-02 15:00:14 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://w3c.github.io/ServiceWorker/#terminate-service-worker">https://w3c.github.io/ServiceWorker/#terminate-service-worker</anchor-external></li></ul></refs></section><section><h1>閉じ中フラグ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="203" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[203]</anchor-end> <code class="DOMi" xml:lang="en">WorkerGlobalScope</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>は、
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><rubyb><anchor>閉じ中</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">closing</rt></rubyb></f></dfn>フラグを持ちます。
初期状態は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">偽</anchor>です。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="202" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;202</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクをキューに追加</anchor>等<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>への追加の発生時に参照されます。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WorkerGlobalScope</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>の
<dfn><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">close</anchor></code></dfn> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>は、次のようにしなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;44</anchor-internal></src>。<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="99" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[99]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">原子的</anchor>に:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈オブジェクト</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>イベントループ</anchor></f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>タスクキュー</anchor></f>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>をすべて捨てます。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈オブジェクト</anchor>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>closing flag</anchor></f> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>に設定します。</li></ol></li></ol></figure></p></section><section><h1>ワーカーの終了</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="96" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[96]</anchor-end> <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Worker</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>の 
<dfn><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">terminate</anchor></code></dfn> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>は、
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">関連付けられた<anchor>ワーカー</anchor></f>について<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを停止</anchor>しなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="95" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;95</anchor-internal></src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="97" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[97]</anchor-end> <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SharedWorker</anchor></code> にはありません。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="88" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[88]</anchor-end> <dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを停止<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">terminate a worker</rt></rubyb></dfn>するには、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">並列に</anchor>次のようにしなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="78" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;78</anchor-internal></src>。<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="89" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[89]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WorkerGlobalScope</anchor></code></f>
の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>closing flag</anchor></f> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="90" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[90]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WorkerGlobalScope</anchor></code></f> 
の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>イベントループ</anchor></f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>タスクキュー</anchor></f>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>をすべて捨てます。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="91" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[91]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>で動作中の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>について、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">走っているスクリプトの実行中断</anchor>を実行します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="92" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[92]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WorkerGlobalScope</anchor></code></f>
が <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DedicatedWorkerGlobalScope</anchor></code> なら、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">暗示的なポート</f>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor> されている <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">port message queue</anchor>
を空にします。</li></ol></figure></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="94" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[94]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">run a worker</anchor> のメインの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>や <code xmlns="http://www.w3.org/1999/xhtml" class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">importScripts</anchor></code>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>が実行停止されることがあります。
その他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>も (明記されていませんが) 停止するはずです。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="73" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[73]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを走らせる</anchor>処理の最後の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーの終了</anchor>の段階は、
<var>内側設定群</var>と<var>ワーカー大域適用範囲</var>を次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;48</anchor-internal></src>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="74" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[74]</anchor-end> <var>内側設定群</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>活性タイマーのリスト</anchor></f>を空にします。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="75" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[75]</anchor-end> <var>ワーカー大域適用範囲</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート群<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">ワーカーのポート群</title></f>の各<var>ポート</var>について、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="201" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[201]</anchor-end> <var>ポート</var>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor> を実行します。</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="76" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[76]</anchor-end> <var>ワーカー大域適用範囲</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有子集合</f>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">空リスト</title></anchor>にします。</li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>Blob URL Store</anchor></f> 内の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Blob URL</anchor> は (暗黙に) 破棄されると思われます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを走らせる</anchor>処理から呼び出されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="87" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[87]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>が <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">closing flag</f>
が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>に設定されてもなお走り続けている場合で、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">active needed worker</anchor> でなくなった時、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを停止</anchor>させても構いません。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="78" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;78</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="111" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[111]</anchor-end> <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Worker</anchor></code> や <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SharedWorker</anchor></code>
への参照を破棄すると、その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>からアクセスする手段がなくなるかもしれません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>上は、それによって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>が破棄されるわけではありません。
しかし実際には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GC</anchor> により破棄されるようです <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;21</anchor-internal></src>。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>から観測できない実装の最適化といえるものなので、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>上には現れません。)</p></section><section><h1>サービスワーカーの終端</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サービスワーカーを終端<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">terminate service worker</rt></rubyb></dfn>させるには、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サービスワーカー</anchor><var>ワーカー</var>を次のようにします <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal></src>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <var>ワーカー</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">走っている</f>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">偽</anchor>の場合、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> ここで停止します。</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <var>大域適用範囲</var>を、<var>ワーカー</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大域オブジェクト</f>に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <var>大域適用範囲</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">閉じ中フラグ</f>を、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <var>ワーカー</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">set of extended events</f> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">空リスト</title></anchor>にします。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <var>大域適用範囲</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントループ</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー群</f>の各<var><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor></var>について、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <var>タスク</var>を、<var>タスクキュー</var>を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">dequeue</anchor> した結果に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <var>タスク</var>が <code>null</code> 以外なら、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <var>タスク</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク源</f>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">handle fetch task source</anchor>
または <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">handle functional event task source</anchor> なら、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクをキューに追加</anchor>します。<figure class="list members"><dl><dt><var>タスク</var></dt><dd><var>タスク</var></dd><dt><var>タスク源</var></dt><dd><var>タスク</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク源</f></dd><dt><var><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor></var></dt><dd><var>ワーカー</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">containing service worker registration</f> の
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー群</f>の<var>タスクキュー</var>に相当する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor></dd></dl></figure></li></ol></li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <var>ワーカー</var>で動作中の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>について、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">走っているスクリプトの実行中断</anchor>を実行します。</li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> 実行中の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">handle fetch</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Install</anchor> を失敗させることになる場合があります。</p><section><h1>文脈</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>は、処理する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor>がなくなったとき、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サービスワーカーを終端</anchor>させて構いません。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">無限ループ</anchor>や割当時間超過など、
異常を検知したとき、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor>の処理中であっても<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サービスワーカーを終端</anchor>させて構いません。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Install</anchor> から呼び出されることがあります。</p></section></section><section><h1>歴史</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>の歴史も参照。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <cite xml:lang="en">Editorial: restructure ownership of workers to parent-owners</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2017-04-14 14:47:44 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/59a4750f475acd789ee436b4906972ba2081d8b3">https://github.com/whatwg/html/commit/59a4750f475acd789ee436b4906972ba2081d8b3</anchor-external></p><section><h1>ワーカーを殺す</h1><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="77" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[77]</anchor-end> <cite xml:lang="en-GB-x-hixie">HTML Standard</cite> (<time>2015-05-06 10:42:35 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#kill-a-worker">https://html.spec.whatwg.org/#kill-a-worker</anchor-external></li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="84" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[84]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>は、いつでも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを殺す</anchor>処理を実行して構いません。
例えば次の時に実行できます。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="77" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;77</anchor-internal></src><figure class="list"><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="85" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[85]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>に要求された時</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="86" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[86]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CPU</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">quota</anchor> 超過時</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="87" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[87]</anchor-end> <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>closing flag</anchor></f> が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>に設定されてもなお走り続けている場合で、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">active needed worker</anchor> でなくなった時</li></ul></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="79" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[79]</anchor-end> <dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを殺す<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">kill a worker</rt></rubyb></dfn>には、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">並列に</anchor>次のようにしなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="77" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;77</anchor-internal></src>。<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="80" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[80]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WorkerGlobalScope</anchor></code></f>
の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>closing flag</anchor></f> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="81" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[81]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WorkerGlobalScope</anchor></code></f>
の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>イベントループ</anchor></f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>タスクキュー</anchor></f>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>をすべて捨てます。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="82" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[82]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>定義の時間、待ちます。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="83" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[83]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>で動作中の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>について、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">走っているスクリプトの実行中断</anchor>を実行します。</li></ol></figure></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="93" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[93]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">run a worker</anchor> のメインの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>や <code xmlns="http://www.w3.org/1999/xhtml" class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">importScripts</anchor></code>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>が実行停止されることがあります。
その他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>も (明記されていませんが) 停止するはずです。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <cite xml:lang="en">Remove overly permissive &quot;kill a worker&quot; algorithm</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2017-04-19 16:37:30 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/77c694e25adabfc5706b5885fbcc1b0d3d5c4416">https://github.com/whatwg/html/commit/77c694e25adabfc5706b5885fbcc1b0d3d5c4416</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <cite>The WHATWG Blog — HTML and shared memory</cite>
(<time>2017-05-02 09:07:11 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://blog.whatwg.org/html-and-shared-memory">https://blog.whatwg.org/html-and-shared-memory</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <cite xml:lang="en">Meta: export WorkerGlobalScope &quot;closing&quot; dfn</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">jugglinmike</anchor>著, <time>2017-05-23 00:41:00 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/018547046496a8eed2a660544462589e1c7c4ff5">https://github.com/whatwg/html/commit/018547046496a8eed2a660544462589e1c7c4ff5</anchor-external></p></section></section></body></html>