/[suikacvs]/markup/html/html5/spec-ja/workers-non-normative.ja.html.u8
Suika

Contents of /markup/html/html5/spec-ja/workers-non-normative.ja.html.u8

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (hide annotations) (download)
Thu Jul 17 13:14:40 2008 UTC (18 years ago) by wakaba
Branch: MAIN
Changes since 1.11: +71 -93 lines
*** empty log message ***

1 wakaba 1.1
2     <html lang=en-US-x-hixie>
3     <head>
4     <title>Web Workers</title>
5     <link href="http://www.whatwg.org/style/specification" rel=stylesheet>
6     <!-- Japanese-translation-only style rules -->
7     <style>
8     em {
9     text-decoration: underline;
10     }
11     ins.ja-note {
12     background-color: #EEFFFF;
13     color: black;
14     }
15     </style>
16     <link href="http://www.whatwg.org/images/icon" rel=icon>
17    
18     <body class=draft>
19     <div class=head>
20     <p><span class=ja-translation lang=ja><a class=logo href="http://www.whatwg.org/" rel=home><img lang=en alt=WHATWG
21     src="http://www.whatwg.org/images/logo"></a></span></p>
22    
23     <h1 id=web-workers>Web Workers</h1>
24    
25     <h2 class="no-num no-toc" id=draft><span class=ja-translation lang=ja>勧告案<ins class=ja-note>の非公式和訳</ins> &mdash;
26 wakaba 1.11 <ins class=ja-note>(原文出版日)</ins> 2008年7月17日</span></h2>
27 wakaba 1.1
28     <p><span class=ja-translation lang=ja>みなさんにも作業にご参加いただけます。 <a
29     href="http://www.whatwg.org/mailing-list">作業部会の議論用メイリング・リストに参加してください。</a></span></p>
30    
31     <p><span class=ja-translation lang=ja><strong>Web デザイナー!</strong> みなさんのための <a
32     href="http://blog.whatwg.org/faq/" lang=en>FAQ</a>、<a
33     href="http://forums.whatwg.org/">掲示板</a>、<a
34     href="http://www.whatwg.org/mailing-list#help">ヘルプ用メイリング・リスト</a>があります!
35    
36     </span><p>
37    
38     <!-- Japanese-translation-only notes -->
39 wakaba 1.3 <ins class=ja-note style="display: block" lang=ja>
40 wakaba 1.1 <p>この文書は、 WHATWG HTML5 仕様書の日本語訳です。
41     HTML5 の正式な仕様書は英語版だけであり、
42     この日本語訳はあくまで参考としてご利用ください。
43    
44 wakaba 1.3 <p lang=en>This document is a Japanese translation of
45 wakaba 1.1 the WHATWG HTML5 specification. Note that the only normative specification
46     for the HTML5 is the original English version and this Japanese
47     translation is non‐normative.
48 wakaba 1.3
49     <p>日本語訳は <a href="edit/" rel=edit>Web 界面</a>を使って編集できます。
50     編集結果はおよそ3時間おきに反映されます。
51     また、原文の変更には毎日自動的に追随しています。
52    
53 wakaba 1.8 <p lang=en>The Japanese text can be edited using the <a href="edit/" rel=edit>Web
54 wakaba 1.3 interface</a>. Any modifications will be reflected to this translation
55     in about three hours. Note that any changes to the original specification
56     will automatically be incorporated to this translation every day.
57 wakaba 1.1 </ins>
58    
59     <p><span><!-- dummy --></span></p>
60    
61     <dl>
62     <dt><span class=ja-translation lang=ja><ins class=ja-note>原文の</ins>この版</span><dd><a
63     href="http://www.whatwg.org/specs/web-workers/current-work/">http://www.whatwg.org/specs/web-workers/current-work/</a>
64    
65     <dt><span class=ja-translation lang=ja><ins class=ja-note>原文の</ins>改版履歴:</span><dd><span class=ja-translation lang=ja><span lang=en>Twitter</span> メッセージ (編集上の変更以外): <a
66     href="http://twitter.com/WHATWG">http://twitter.com/WHATWG</a></span><dd>Commit-Watchers mailing list: <a
67     href="http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org">http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org</a>
68    
69     <dd><span class=ja-translation lang=ja>対話的 <span lang=en>Web</span> 界面: <a href="http://html5.org/tools/web-workers-tracker">http://html5.org/tools/web-workers-tracker</a></span><dd><span class=ja-translation lang=ja><span lang=en>Subversion</span> 界面: <a href="http://svn.whatwg.org/webworkers/">http://svn.whatwg.org/webworkers/</a></span><dt><span class=ja-translation lang=ja>問題:</span><dd><span class=ja-translation lang=ja>フィードバックの送信先: <a
70     href="http://www.whatwg.org/mailing-list">[email protected]</a></span><dd><span class=ja-translation lang=ja>フィードバックの閲覧・投票: <a
71     href="http://www.whatwg.org/issues/">http://www.whatwg.org/issues/</a></span><dt><span class=ja-translation lang=ja>編集者:</span><dd>Ian Hickson, Google, [email protected]
72     </dl>
73    
74     <p class=copyright>&copy; Copyright 2004-2008 Apple Computer, Inc.,
75     Mozilla Foundation, and Opera Software ASA.</p>
76    
77     <p class=copyright>You are granted a license to use, reproduce and create
78     derivative works of this document.</p>
79     </div>
80    
81     <hr>
82    
83     <h2 class="no-num no-toc" id=abstract><span class=ja-translation lang=ja>概要</span></h2>
84    
85     <p><span class=ja-translation lang=ja>この仕様書は、 Web アプリケーションで主たる頁と並列に背景労働者スクリプトを動作させることを可能とする
86     API を定義します。
87     これによって、メッセージ・パッシングによるスレッド的操作を協調機構として利用できるようになります。</span><h2 class="no-num no-toc" id=status><span class=ja-translation lang=ja>この文書の状態</span></h2>
88    
89     <p><span class=ja-translation lang=ja><strong>この文書は作業中です!</strong>
90     この文書は、コメントへの対応や通常の開発の過程として、
91     毎時毎分とは言い過ぎですが毎日のペースで変更されています。
92     コメントは非常に歓迎していますので、
93     <a href="mailto:[email protected]">[email protected]</a>
94     へお送りください。よろしくお願いします。</span><p><span class=ja-translation lang=ja>現在の焦点は、第1案の開発です。</span><p><span class=ja-translation lang=ja>実装者は、この仕様書が安定していないことに注意するべきです。
95     <strong>実装者は議論に参加しておかないと、
96     仕様がその実装とは非互換に変更されてしまうかもしれません。</strong>
97     この仕様書がいずれ実装呼び掛けの段階に達するのよりも前にこの仕様を実装したい販売者は、
98 wakaba 1.7 <a href="http://www.whatwg.org/mailing-list">WHATWG メイリング・リスト</a>に参加し、
99 wakaba 1.1 議論に加わるべきです。</span><p><span class=ja-translation lang=ja>この仕様書は <a
100     href="http://www.w3.org/html/wg">W3C HTML WG</a>
101     によっても出版されています。2つの仕様書の目次以降は同一です。</span><h2 class="no-num no-toc" id=contents><span class=ja-translation lang=ja>目次
102     </span></h2>
103     <!--begin-toc-->
104    
105     <ul class=toc>
106     <li><a href="#introduction"><span class=secno>1. </span>Introduction</a>
107     <ul class=toc>
108 wakaba 1.9 <li><a href="#tutorial"><span class=secno>1.1 </span>Tutorial</a>
109 wakaba 1.1
110 wakaba 1.4 <li><a href="#requirements"><span class=secno>1.2
111     </span>Requirements</a>
112 wakaba 1.1
113 wakaba 1.9 <li><a href="#conformance"><span class=secno>1.3 </span>Conformance
114 wakaba 1.1 requirements</a>
115     <ul class=toc>
116 wakaba 1.9 <li><a href="#dependencies"><span class=secno>1.3.1
117 wakaba 1.1 </span>Dependencies</a>
118     </ul>
119    
120 wakaba 1.9 <li><a href="#terminology"><span class=secno>1.4 </span>Terminology</a>
121     </ul>
122    
123     <li><a href="#inside"><span class=secno>2. </span>Inside workers</a>
124     <ul class=toc>
125     <li><a href="#the-windowworker"><span class=secno>2.1 </span>The
126     <code>WindowWorker</code> interface</a>
127    
128     <li><a href="#the-queue"><span class=secno>2.2 </span>The queue of
129     events</a>
130    
131 wakaba 1.11 <li><a href="#the-workers"><span class=secno>2.3 </span>The worker's
132     ports</a>
133    
134     <li><a href="#processing"><span class=secno>2.4 </span>Processing
135 wakaba 1.9 model</a>
136     </ul>
137    
138     <li><a href="#creating"><span class=secno>3. </span>Creating workers</a>
139     <ul class=toc>
140     <li><a href="#the-windowworkercreators"><span class=secno>3.1 </span>The
141     <code>WindowWorkerCreators</code> interface</a>
142 wakaba 1.1 </ul>
143    
144     <li class=no-num><a href="#references">References</a>
145    
146     <li class=no-num><a href="#acknowledgements">Acknowledgements</a>
147     </ul>
148     <!--end-toc-->
149    
150     <hr>
151    
152 wakaba 1.3 <h2 id=introduction><span class=ja-translation lang=ja><span class=secno>1. </span>はじめに</span></h2>
153 wakaba 1.1
154 wakaba 1.12 <h3 id=tutorial><span class=ja-translation lang=ja><span class=secno>1.1 </span>解説</span></h3>
155 wakaba 1.1
156 wakaba 1.9 <p><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><p class=big-issue>This section is missing.
157    
158     <h3 id=requirements><span class=ja-translation lang=ja><span class=secno>1.2 </span>要件</span></h3>
159 wakaba 1.1
160 wakaba 1.6 <p><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><p><span class=ja-translation lang=ja>この仕様書は、次に示す利用事例と要件に取り組むことを目指します。</span><ul>
161     <li><span class=ja-translation lang=ja>背景労働者: Web アプリケーションは、そのデータを鯖と同期しておく必要があります。
162     これは、鯖への更新の送信と鯖からの更新の両方を含み、
163     アプリケーションがオフラインとなった時の更新のバッファリングの取扱いも含みます。
164     そのための符号は利用者界面の符号とは独立しているのが理想でしょう。</span><li><span class=ja-translation lang=ja>URL: 労働者は、文字列からではなく、 URL から生み出される<em class=rfc2119 title="SHOULD">べきです</em>。
165     スクリプトはその出典へのアクセスを滅多に有しないからです。</span><li><span class=ja-translation lang=ja>メッセージ・キューイング: 労働者が初期化される前に送信されたメッセージが失われるべきでは<em class=rfc2119 title="SHOULD NOT">ありません</em>。</span><li><span class=ja-translation lang=ja>労働者はタイマーへのアクセスを有する<em class=rfc2119 title="SHOULD">べきです</em>。</span><li><span class=ja-translation lang=ja>労働者はネットワークへのアクセスを有する<em class=rfc2119 title="SHOULD">べきです</em>。</span><li><span class=ja-translation lang=ja>労働者はライブラリを使える<em class=rfc2119 title="SHOULD">べきです</em>。</span><li><span class=ja-translation lang=ja>実装は労働者に <code>Node</code> オブジェクトや
166     <code>Document</code> オブジェクトを晒さなければならない<em class=rfc2119 title="SHOULD NOT">べきではありません</em>。</span><li><span class=ja-translation lang=ja>労働者は外界と何も共有する<em class=rfc2119 title="SHOULD NOT">べきではありません</em>。
167     例えば、労働者自体の中で労働者を現すオブジェクトと労働者を作成した文脈で労働者を表すオブジェクトは異なる<em class=rfc2119 title="SHOULD">べきです</em>。</span><li><span class=ja-translation lang=ja>共有労働者: 同じ Web アプリケーションの複数の実現値は鯖に対する接続を1つだけ維持したいでしょう。</span><li><span class=ja-translation lang=ja>能力保証: ある iframe で動作している符号が他の iframe と何らかの権限 (例えば、
168     住所録へは追加するが読まない) を保証する接続を折衝することが可能である<em class=rfc2119 title="SHOULD">べきです</em>。</span><li><span class=ja-translation lang=ja>委譲: ある労働者が別の労働者を生み出し、呼び出し元が委譲に気づかず、
169     かつ元の労働者がすべてのメッセージを仲介せずに、
170     当該労働者に対する要求を効率的に委譲できる<em class=rfc2119 title="SHOULD">べきです</em>。</span><li><span class=ja-translation lang=ja>親が有用ではなくなった労働者は殺される<em class=rfc2119 title="SHOULD">べきです</em>。
171     労働者はこれが起こることを検知して華麗に終了することができる<em class=rfc2119 title="SHOULD">べきです</em>。</span></ul>
172 wakaba 1.4
173 wakaba 1.9 <h3 id=conformance><span class=ja-translation lang=ja><span class=secno>1.3 </span>適合性要件</span></h3>
174 wakaba 1.1
175     <p><span class=ja-translation lang=ja>この仕様書のすべての図、例、注意書きは、
176     規定の一部ではないと明記された節すべてと同様に、
177     規定の一部ではありません。
178     この仕様書のそれ以外のすべては規定の一部です。</span><p><span class=ja-translation lang=ja>この文書の規定の部分にあるキーワード「<em class=rfc2119 title="MUST">しなければなりません</em>」、
179     「<em class=rfc2119 title="MUST NOT">してはなりません</em>」、
180     「<em class=rfc2119 title="REQUIRED">必須です</em>」、「<em class=rfc2119 title="SHOULD">するべきです</em>」、
181     「<em class=rfc2119 title="SHOULD NOT">するべきではありません</em>」、
182     「<em class=rfc2119 title="RECOMMENDED">推奨します</em>」、「<em class=rfc2119 title="MAY">して構いません</em>」、
183     「<em class=rfc2119 title="OPTIONAL">任意です</em>」は、 RFC 2119 で説明されているように解釈します。
184     可読性の観点から、この仕様書<ins class=ja-note>の原文</ins>では、
185     これらの語<ins class=ja-note>の原語</ins>はすべて大文字では表記しません。
186     <a href="#refsRFC2119">[RFC2119]</a></span></p>
187     <!-- XXX but they should be
188     marked up -->
189    
190     <p><span class=ja-translation lang=ja>算法の一部として<ins class=ja-note>動作の指示の形で (原文では</ins>命令形で<ins class=ja-note>) </ins>記述された要件
191     (例えば「先頭の間隔文字をすべて除去します」や「偽を返し、これらの段階を停止します」)
192     は、算法の紹介で使われたキーワード (<em class=rfc2119 title="MUST">しなければなりません</em>、
193     <em class=rfc2119 title="SHOULD">するべきです</em>、<em class=rfc2119 title="MAY">して構いません</em>など) の意味により解釈します。</span><p><span class=ja-translation lang=ja>いくつかの適合性要件は属性やメソッドやオブジェクトの要件として説明されています。
194     そのような要件は、利用者エージェントに関する要件として解釈します。</span><p><span class=ja-translation lang=ja>算法や特定の段階として説明されている適合性要件は、
195     最終的な結果が等価である限り、任意の方法で実装して<em class=rfc2119 title="MAY">構いません</em>。
196     (特に、この仕様書で定義されている算法は追うのを簡単にしており、
197     高性能であることを目指してはいません。)</span><p><span class=ja-translation lang=ja>この仕様書で定義される適合性の級は、利用者エージェントのみです。</span><p><span class=ja-translation lang=ja>利用者エージェントは、サービス拒否攻撃を防ぐため、
198     記憶容量を使い尽くすことを防ぐため、
199     あるいは環境特有の制限に対応するためなどの目的で、
200 wakaba 1.9 別段の制約のない入力に対して実装特有の制限を設けて<em class=rfc2119 title="MAY">構いません</em>。</span><h4 id=dependencies><span class=ja-translation lang=ja><span class=secno>1.3.1 </span>依存性</span></h4>
201 wakaba 1.1
202     <p><span class=ja-translation lang=ja>この仕様書は他のいくつかの下位仕様書に依存しています。</span><dl>
203     <dt>HTML5
204    
205     <dd>
206     <p><span class=ja-translation lang=ja>HTML5 の多くの基礎的な概念をこの仕様書で使用します。
207     <a href="#refsHTML5">[HTML5]</a></span></p>
208    
209     <dt>ECMAScript
210    
211     <dd>
212     <p><span class=ja-translation lang=ja>この仕様書はスクリプト言語として JavaScript
213     を使うことを想定しています。 <a href="#refsJS">[JS]</a></span></p>
214    
215     <dt>WebIDL
216    
217     <dd>
218 wakaba 1.5 <p><span class=ja-translation lang=ja>この仕様書の IDL ブロックは WebIDL 仕様書における意味を用います。 <a href="#refsWebIDL">[WebIDL]</a></span></p>
219 wakaba 1.1 </dl>
220    
221 wakaba 1.9 <h3 id=terminology><span class=ja-translation lang=ja><span class=secno>1.4 </span>用語</span></h3>
222 wakaba 1.1
223     <p><span class=ja-translation lang=ja>簡単のため、<em>示す</em>、<em>表示する</em>、
224     <em>可視</em>などの用語を文書が利用者に対してレンダリングされる方法に言及する時に使うことがあります。
225     これらの語は視覚媒体を暗示することを意図していません。
226 wakaba 1.10 これらの語は他の媒体にも等価な方法で適用されると考えなければ<em class=rfc2119 title="MUST">なりません</em>。</span><p><span class=ja-translation lang=ja>「<code title="">Foo</code> オブジェクト」という構文 (<code title="">Foo</code>
227     は実際には界面) を時々使いますが、より正確な「界面 <code title="">Foo</code>
228     を実装しているオブジェクト」の代わりに用いています。</span><p><span class=ja-translation lang=ja>DOM という語は、 Web アプリケーションでスクリプトに利用可能とされている API
229 wakaba 1.1 の集合を指して用い、必ずしも DOM 中核仕様書で定義されている実際の
230     <code>Document</code> オブジェクトその他の <code>Node</code>
231     オブジェクトの存在を暗示してはいません。<a
232     href="#refsDOM3CORE">[DOM3CORE]</a></span><p><span class=ja-translation lang=ja>DOM 属性は、その値が (例えば著者のスクリプトにより) 取り出される時<em>取得される</em>といい、
233     新しい値がその属性に割り当てられる時<em>設定される</em>といいます。</span><p><span class=ja-translation lang=ja>DOM オブジェクトが<dfn id=live>生きている</dfn>という場合、
234     そのオブジェクトを返す属性は常に同じオブジェクトを返さなければ<em class=rfc2119 title="MUST">ならない</em>
235     (毎回新しいオブジェクトを返すのではなく) 上に、
236     そのオブジェクトの属性やメソッドがそのオブジェクトの裏にある実際のデータのスナップ写真ではなく、
237 wakaba 1.10 データそのものに対して操作されなければ<em class=rfc2119 title="MUST">ならない</em>ことを意味します。
238 wakaba 1.12 </span><h2 id=inside><span class=ja-translation lang=ja><span class=secno>2. </span>労働者の内側</span></h2>
239 wakaba 1.9
240 wakaba 1.10 <h3 id=the-windowworker><span class=ja-translation lang=ja><span class=secno>2.1 </span><code><a href="#windowworker">WindowWorker</a></code> 界面</span></h3>
241 wakaba 1.9
242     <pre
243     class=idl>[NoInterfaceObject] interface <dfn id=windowworker>WindowWorker</dfn> {
244     readonly attribute boolean <a href="#name" title=dom-windowworker-name>name</a>;
245     readonly attribute boolean <a href="#closing" title=dom-windowworker-closing>closing</a>;
246 wakaba 1.11 void <a href="#close" title=dom-windowworker-close>close</a>();
247    
248     // event handler attributes
249     attribute <span>EventListener</span> <a href="#onjoin" title=handler-windowworker-onjoin>onjoin</a>;
250     attribute <span>EventListener</span> <a href="#onunload" title=handler-windowworker-onunload>onunload</a>;
251 wakaba 1.9 };</pre>
252    
253 wakaba 1.10 <p><span class=ja-translation lang=ja><code><a
254     href="#windowworker">WindowWorker</a></code> 界面を実装するオブジェクトは、
255     <code>Window</code> 界面 (引いては、 <code>WindowTimers</code> 界面と <code><a
256     href="#windowworkercreators">WindowWorkerCreators</a></code> 界面も)
257     と <code>EventTarget</code> 界面を実装しなければ<em class=rfc2119 title="MUST">なりません</em>。</span><p><span class=ja-translation lang=ja><dfn id=name title=dom-windowworker-name><code>name</code></dfn>
258     属性は、<code><a
259     href="#windowworker">WindowWorker</a></code> オブジェクトが「<a
260     href="#run-a">労働者を起動</a>」する算法で作成された時に割り当てられた値を返さなければ<em class=rfc2119 title="MUST">なりません</em>。</span><p>The <dfn id=closing
261 wakaba 1.9 title=dom-windowworker-closing><code>closing</code></dfn> attribute must
262     return false until the "<a href="#kill-a">kill a worker</a>" processing
263     model defined below sets it to false.
264    
265 wakaba 1.12 <p><span class=ja-translation lang=ja>次に示すのは、 <code><a
266     href="#windowworker">WindowWorker</a></code>
267     界面を実装するオブジェクトが対応しなければ<em class=rfc2119 title="MUST">ならない</em>事象取扱器 DOM 属性です。</span><dl>
268 wakaba 1.11 <dt><dfn id=onjoin
269     title=handler-windowworker-onjoin><code>onjoin</code></dfn>
270    
271     <dd>
272 wakaba 1.12 <p><span class=ja-translation lang=ja><code title=event-windowworker-join>join</code> 事象が当該 <code><a href="#windowworker">WindowWorker</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
273     呼び出されなければなりません。</span><dt><dfn id=onunload
274 wakaba 1.11 title=handler-windowworker-onunload><code>onunload</code></dfn>
275    
276     <dd>
277 wakaba 1.12 <p><span class=ja-translation lang=ja><code title=event-unload>unload</code> 事象が当該 <code><a href="#windowworker">WindowWorker</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
278     呼び出されなければなりません。</span></dl>
279 wakaba 1.11
280 wakaba 1.10 <h3 id=the-queue><span class=ja-translation lang=ja><span class=secno>2.2 </span>事象の待ち行列</span></h3>
281 wakaba 1.9
282 wakaba 1.10 <p><span class=ja-translation lang=ja>各 <code><a href="#windowworker">WindowWorker</a></code> オブジェクトは、
283 wakaba 1.12 <dfn id=queue>事象の待ち行列</dfn> (はじめは空) と関連付けられています。</span><p><span class=ja-translation lang=ja>待ち行列中の事象は、 DOM 事象か小休止呼び戻しのいずれかです。</span><p><span class=ja-translation lang=ja>労働者中で呼び出しまたは発送されるすべての非同期の呼び戻しと事象は、
284     作業者の待ち行列に追加されなければなりません。
285     ただし、実際の呼び戻しの呼び出しや事象の発送は、後述の「<a
286     href="#run-a">労働者を起動</a>」処理モデルに従い処理されます。</span><p><span class=ja-translation lang=ja>一旦 <code><a href="#windowworker">WindowWorker</a></code> の <code
287 wakaba 1.11 title=dom-windowworker-closing><a href="#closing">closing</a></code>
288 wakaba 1.12 属性が真に設定されると、待ち行列は、以後追加されるべきものがあっても、
289     すべて捨てなければ<em class=rfc2119 title="MUST">なりません</em>。実効的には、一旦 <code
290 wakaba 1.11 title=dom-windowworker-closing><a href="#closing">closing</a></code>
291 wakaba 1.12 属性が真となると、タイマーが発火を停止したり、
292     すべての未決の非同期処理に関する通知は捨てられるようになるなどします。</span><h3 id=the-workers><span class=ja-translation lang=ja><span class=secno>2.3 </span>作業者のポート</span></h3>
293 wakaba 1.11
294 wakaba 1.12 <p><span class=ja-translation lang=ja>作業者は、メッセージ通信路とその <code>MessagePort</code>
295     オブジェクトを通じて、他の労働者や閲覧文脈と通信します。</span><p><span class=ja-translation lang=ja>各 <code><a href="#windowworker">WindowWorker</a></code> <var
296     title="">worker</var> は、<dfn id=the-workers0>労働者のポート</dfn>の並びを持ちます。
297     これは、他のポートと絡められており、かつ <code title=dom-MessagePort-ownerWindow>ownerWindow</code>
298     が <var
299     title="">worker</var> であるポートを1つ (だけ) 持つような <code>MessagePort</code>
300     オブジェクトすべてを含むものです。この並びは<a href="#queue">事象の待ち行列</a>中で未決の事象中にある
301     <code>MessagePort</code> オブジェクトすべてを含みます。</span><h3 id=processing><span class=ja-translation lang=ja><span class=secno>2.4 </span>処理モデル</span></h3>
302    
303     <p><span class=ja-translation lang=ja>利用者エージェントが、<span>URL</span> <var
304     title="">url</var>、閲覧文脈 <var title="">owner browsing
305     context</var>、<code>Document</code> <var title="">owner
306     document</var> のスクリプトに対する、 <var
307     title="">name</var> と名付けられた<dfn id=run-a>労働者を起動</dfn>する、
308     という時には、利用者エージェントは、次の段階を、完全に分離された並列実行環境で実行しなければ<em class=rfc2119 title="MUST">なりません</em>。</span><ol>
309     <li>
310     <p><span class=ja-translation lang=ja><var title="">url</var> で識別される資源を取って来ようと試みます。</span></p>
311    
312     <p><span class=ja-translation lang=ja>この試みが失敗した場合、これらの段階を停止し、この段階を呼び出した算法が定義する<a
313     href="#worker0" title="worker creation failed">誤り取扱段階</a>を呼び出します。</span></p>
314    
315     <p><span class=ja-translation lang=ja>この試みが成功した場合、 <var title="">script</var>
316     を得られた資源とします。</span></p>
317    
318     <p class=note><span class=ja-translation lang=ja><code>script</code> 要素と同様に、スクリプトの MIME 型は無視します。
319     <code>script</code> 要素とは異なり、
320     型を上書きする方法はありません。スクリプトは常に JavaScript
321     と仮定します。</span></p>
322 wakaba 1.11 <!-- XXX people will complain about
323     this. I guess we might want to examine the MIME type... -->
324    
325    
326     <li>
327 wakaba 1.12 <p><span class=ja-translation lang=ja>新しい <code><a href="#windowworker">WindowWorker</a></code>
328     オブジェクト <var title="">window</var> を作成します。</span></p>
329 wakaba 1.9
330     <li>
331 wakaba 1.12 <p><span class=ja-translation lang=ja><var title="">window</var> の <code title=dom-windowworker-name><a
332     href="#name">name</a></code>
333     属性を <var title="">name</var> の値に設定します。</span></p>
334 wakaba 1.9
335     <li>
336 wakaba 1.12 <p><span class=ja-translation lang=ja><var title="">script</var> のスクリプト実行文脈 (と大域オブジェクトも)
337     を <var
338     title="">window</var> とします。</span></p>
339 wakaba 1.9
340     <li>
341 wakaba 1.12 <p><span class=ja-translation lang=ja><var title="">script</var> のスクリプト閲覧文脈を <var title="">owner browsing context</var>
342     とします。</span></p>
343 wakaba 1.9
344     <li>
345 wakaba 1.12 <p><span class=ja-translation lang=ja><var title="">script</var> のスクリプト文書文脈を <var title="">owner document</var>
346     とします。</span></p>
347 wakaba 1.9
348     <li>
349 wakaba 1.12 <p><span class=ja-translation lang=ja>この段階を呼び出す算法が定義する<a href="#worker" title="worker creation succeeded">成功段階</a>を呼び出します。
350     (これは、<a href="#queue">事象の待ち行列</a>)
351     に事象を追加します。)</span></p>
352 wakaba 1.11
353     <li>
354 wakaba 1.12 <p><span class=ja-translation lang=ja><var title="">worker</var> の監視を開始し、
355     <var title="">window</var> オブジェクトの <code
356 wakaba 1.11 title=dom-windowworker-closing><a href="#closing">closing</a></code>
357 wakaba 1.12 属性が偽で<a href="#the-workers0">労働者のポート</a>のすべてが
358     <code title=dom-MessagePort-active>active</code>
359     属性が偽に設定されているという時には常に、利用者エージェントがスクリプトの実行を、 <code
360 wakaba 1.11 title=dom-windowworker-closing><a href="#closing">closing</a></code>
361 wakaba 1.12 属性が真に切り替わるまでか または<a href="#the-workers0">労働者のポート</a>の並びのいずれか1つの
362     <code>MessagePort</code> オブジェクトの <code title=dom-MessagePort-active>active</code>
363     属性が値として真を持つようになるまでのいずれかの間、
364     一時停止するようにします。
365    
366     </span></p>
367 wakaba 1.11
368     <li>
369     <p>Start monitoring <var title="">worker</var>, such that as soon as the
370     list of <a href="#the-workers0">the worker's ports</a> becomes empty,
371     the <var title="">window</var> object's <code
372     title=dom-windowworker-closing><a href="#closing">closing</a></code>
373     attribute is set to true.</p>
374    
375     <p class=note>This can never happen at this point in the algorithm: as
376     soon as the worker ran the <a href="#worker" title="worker creation
377     succeeded">success steps</a>, the <a href="#queue">queue of events</a>
378     received a <code title=event-join>join</code> event with a
379     <code>MessagePort</code>.</p>
380    
381     <li>
382     <p>Run <var title="">script</var> until it either returns, fails to catch
383     an exception, or gets prematurely aborted by the "<a href="#kill-a">kill
384     a worker</a>" algorithm below.</p>
385    
386     <p class=note>If the script gets aborted by the "<a href="#kill-a">kill a
387     worker</a>" algorithm, then that same algorithm will cause there to only
388     be a single event in the <a href="#queue">queue of events</a> at the
389     next step, namely the <code title=message-unload>unload</code> event.
390     However, if the event is ignored then it will become true as soon as
391     that port is garbage collected.</p>
392 wakaba 1.9
393     <li>
394 wakaba 1.11 <p><i>Event loop</i>: Wait until either there is an event in the <a
395 wakaba 1.9 href="#queue">queue of events</a> associated with <var
396 wakaba 1.11 title="">window</var> or the <var title="">window</var> object's <code
397     title=dom-windowworker-closing><a href="#closing">closing</a></code>
398     attribute is set to true.</p>
399 wakaba 1.9
400     <li>
401     <p>Dispatch the oldest event or callback in the <a href="#queue">queue of
402 wakaba 1.11 events</a>, if any. The handling of this event or the execution of this
403     callback might get prematurely aborted by the "<a href="#kill-a">kill a
404     worker</a>" algorithm below.</p>
405 wakaba 1.9
406     <li>
407     <p>If there are any more events in the <a href="#queue">queue of
408     events</a> or if the <var title="">window</var> object's <code
409     title=dom-windowworker-closing><a href="#closing">closing</a></code>
410     attribute is set to false, then jump back to the step above labeled
411     <i>event loop</i>.</p>
412    
413     <li>
414     <p class=big-issue>timers, intervals, XMLHttpRequests, database
415     transactions, etc, must be killed; ports must be deactivated and
416 wakaba 1.11 unentangled (do not send unload)</p>
417 wakaba 1.9 </ol>
418    
419     <hr>
420    
421     <p>When a user agent is to <dfn id=kill-a>kill a worker</dfn>, it must run
422     the following steps in parallel with the worker's main loop (the "<a
423     href="#run-a">run a worker</a>" processing model defined above):
424    
425     <ol>
426     <li>
427     <p>Create an <code>Event</code> object with the event name <code
428     title=event-unload>unload</code>, which does not bubble and is not
429     cancelable, and add it to the worker's <code><a
430     href="#windowworker">WindowWorker</a></code> object's <a
431 wakaba 1.11 href="#queue">queue of events</a>, targetted at the <code><a
432     href="#windowworker">WindowWorker</a></code> object itself.
433    
434     <li>
435     <p>Set the worker's <code><a href="#windowworker">WindowWorker</a></code>
436     object's <code title=dom-windowworker-closing><a
437     href="#closing">closing</a></code> attribute to true.
438 wakaba 1.9
439     <li>
440 wakaba 1.11 <p>Wait a user-agent-defined amount of time. If the "<a href="#run-a">run
441     a worker</a>" processing model defined above immediately starts running
442     event listeners registered for <code title=event-unload>unload</code>
443     event, this time should not be zero &mdash; the idea is that the <code
444     title=event-unload>unload</code> event can be used to clean up when
445     shutting down unexpectedly.
446 wakaba 1.9
447     <li>
448     <p>If there are any events in the <a href="#queue">queue of events</a>
449     other than the <code title=event-unload>unload</code> event that this
450     algorithm just added, discard them without dispatching them.
451    
452     <li>
453     <p>If the <code title=event-unload>unload</code> event that this
454     algorithm just added hasn't yet been dispatched, then abort the script
455     currently running in the worker.
456    
457     <li>
458     <p>Wait a user-agent-defined amount of time.
459    
460     <li>
461     <p>Abort the script currently running in the worker (if any script is
462     running, then it will be a handler for the <code
463     title=event-unload>unload</code> event).
464     </ol>
465    
466 wakaba 1.11 <hr>
467    
468     <p>When a script invokes the <dfn id=close
469     title=dom-windowworker-close><code>close()</code></dfn> method on a
470     <code><a href="#windowworker">WindowWorker</a></code> object, the user
471     agent must run the following steps:
472    
473     <ol>
474     <li>
475     <p>Create an <code>Event</code> object with the event name <code
476     title=event-unload>unload</code>, which does not bubble and is not
477     cancelable, and add it to the <code><a
478     href="#windowworker">WindowWorker</a></code> object's <a
479     href="#queue">queue of events</a>, targetted at the <code><a
480     href="#windowworker">WindowWorker</a></code> object itself.
481    
482     <li>
483     <p>Set the worker's <code><a href="#windowworker">WindowWorker</a></code>
484     object's <code title=dom-windowworker-closing><a
485     href="#closing">closing</a></code> attribute to true.
486    
487     <li>
488     <p>For each <code>MessagePort</code> object that is entangled with
489     another port and that has one (but only one) port whose <code
490     title=dom-MessagePort-ownerWindow>ownerWindow</code> is the <code><a
491     href="#windowworker">WindowWorker</a></code> object on which the method
492     was invoked, run the following substeps:</p>
493    
494     <ol>
495     <li>
496     <p>Unentangle the two ports.
497    
498     <li>
499     <p>Set both ports' <code title=dom-MessagePort-active>active</code>
500     attribute to false.
501    
502     <li>
503     <p>At the next available opportunity, after any scripts have finished
504     executing<!-- XXX queue -->, <span>fire a simple event</span> called
505     <code title=event-unload>unload</code> at the other port (the one
506     whose <code title=dom-MessagePort-ownerWindow>ownerWindow</code> is
507     not the <code><a href="#windowworker">WindowWorker</a></code> object
508     on which the <code title=dom-windowworker-close><a
509     href="#close">close()</a></code> method was called).
510     </ol>
511     </ol>
512    
513 wakaba 1.9 <h2 id=creating><span class=secno>3. </span>Creating workers</h2>
514    
515 wakaba 1.10 <h3 id=the-windowworkercreators><span class=ja-translation lang=ja><span class=secno>3.1 </span><code><a href="#windowworkercreators">WindowWorkerCreators</a></code> 界面</span></h3>
516 wakaba 1.9
517     <pre
518     class=idl>[NoInterfaceObject] interface <dfn id=windowworkercreators>WindowWorkerCreators</dfn> {
519     <span>MessagePort</span> <span title=dom-WindowWorkerCreators-createWorker>createWorker</span>(in DOMString scriptURI);
520     <span>MessagePort</span> <span title=dom-WindowWorkerCreators-createNamedWorker>createNamedWorker</span>(in DOMString name, in DOMString scriptURI);
521     };</pre>
522    
523     <p>Objects that implement the <code>Window</code> interface must also
524     implement the <code><a
525     href="#windowworkercreators">WindowWorkerCreators</a></code> interface.
526 wakaba 1.11
527     <hr>
528    
529     <p>When the <code
530     title=dom-WindowWorkerCreators-createWorker>createWorker()</code> method
531     is invoked, the user agent must run the following steps:
532    
533     <ol>
534     <li class=big-issue>... <!--
535     resolve url
536     if that fails, throw
537     if it's not same-orgin, throw
538     run create worker steps
539     -->
540    
541     </ol>
542    
543     <hr>
544    
545     <p>When the <code
546     title=dom-WindowWorkerCreators-createNamedWorker>createNamedWorker()</code>
547     method is invoked, the user agent must run the following steps:
548    
549     <ol>
550     <li class=big-issue>... <!--
551     if /name/ = "", jump to createWorker() steps
552     resolve url
553     if that fails, throw
554     if it's not same-orgin, throw
555     look for named worker whose name is /name/ and that has closing=false and whose document's origin is the same as the calling scripts'
556     if you don't find one, run 'create worker' steps with given name and resulting absolute url; return returned port
557     check that resulting absolute url matches the one in the worker; if not, throw
558     create two ports
559     return port 1
560     invoke the "join a worker" steps with the two ports
561     -->
562    
563     </ol>
564    
565     <hr>
566    
567     <p>The steps to <dfn id=create>create a worker</dfn> are as follows:
568    
569     <ol>
570     <li class=big-issue>... <!--
571     create two ports
572     in a separate thread, 'run a worker' with name "" and resulting absolute url
573     return port 1
574     success steps: invoke the "join a worker" steps with the two ports
575     failure steps: fire 'error' on port1
576     -->
577    
578     </ol>
579    
580     <p class=big-issue><dfn id=worker>worker creation succeeded</dfn>, <dfn
581     id=worker0>worker creation failed</dfn>
582    
583     <hr>
584    
585     <p>The steps to <dfn id=join-a>join a worker</dfn> are as follows:
586    
587     <ol>
588     <li class=big-issue>... <!--
589     given two ports port1, port2, and a worker
590     entangle the ports
591     fire 'join' event on the worker, passing port2
592     fire 'load' event on port1.
593     -->
594    
595     </ol>
596 wakaba 1.9
597     <p class=big-issue>...
598    
599     <h2 class=no-num id=references><span class=ja-translation lang=ja>参考文献</span></h2>
600 wakaba 1.1
601     <p class=big-issue><span class=ja-translation lang=ja>この章は将来の仕様案で執筆します。</span><h2 class=no-num id=acknowledgements><span class=ja-translation lang=ja>謝辞</span></h2>
602     <!-- ACKS -->
603    
604 wakaba 1.9 <p><span class=ja-translation lang=ja>Maciej Stachowiak, Mike Smith の有用かつ重要なコメントに感謝します。</span><p>Huge thanks to the whole Gears team, who pioneered this technology and
605     whose experience has been a huge influence on this specification.

[email protected]
ViewVC Help
Powered by ViewVC 1.1.24