/[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.14 - (hide annotations) (download)
Fri Jul 18 13:12:09 2008 UTC (18 years ago) by wakaba
Branch: MAIN
Changes since 1.13: +132 -142 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 wakaba 1.14 em, i {
9     font-style: normal;
10 wakaba 1.1 text-decoration: underline;
11     }
12 wakaba 1.14
13     .note, .warning {
14     font-style: normal;
15     }
16     p.note:before {
17     content: '注意: ';
18     }
19     p.warning:before {
20     content: '\26A0 警告! ';
21     }
22    
23 wakaba 1.1 ins.ja-note {
24     background-color: #EEFFFF;
25     color: black;
26     }
27     </style>
28     <link href="http://www.whatwg.org/images/icon" rel=icon>
29    
30     <body class=draft>
31     <div class=head>
32     <p><span class=ja-translation lang=ja><a class=logo href="http://www.whatwg.org/" rel=home><img lang=en alt=WHATWG
33     src="http://www.whatwg.org/images/logo"></a></span></p>
34    
35     <h1 id=web-workers>Web Workers</h1>
36    
37     <h2 class="no-num no-toc" id=draft><span class=ja-translation lang=ja>勧告案<ins class=ja-note>の非公式和訳</ins> &mdash;
38 wakaba 1.13 <ins class=ja-note>(原文出版日)</ins> 2008年7月18日</span></h2>
39 wakaba 1.1
40     <p><span class=ja-translation lang=ja>みなさんにも作業にご参加いただけます。 <a
41     href="http://www.whatwg.org/mailing-list">作業部会の議論用メイリング・リストに参加してください。</a></span></p>
42    
43     <p><span class=ja-translation lang=ja><strong>Web デザイナー!</strong> みなさんのための <a
44     href="http://blog.whatwg.org/faq/" lang=en>FAQ</a>、<a
45     href="http://forums.whatwg.org/">掲示板</a>、<a
46     href="http://www.whatwg.org/mailing-list#help">ヘルプ用メイリング・リスト</a>があります!
47    
48     </span><p>
49    
50     <!-- Japanese-translation-only notes -->
51 wakaba 1.3 <ins class=ja-note style="display: block" lang=ja>
52 wakaba 1.1 <p>この文書は、 WHATWG HTML5 仕様書の日本語訳です。
53     HTML5 の正式な仕様書は英語版だけであり、
54     この日本語訳はあくまで参考としてご利用ください。
55    
56 wakaba 1.3 <p lang=en>This document is a Japanese translation of
57 wakaba 1.1 the WHATWG HTML5 specification. Note that the only normative specification
58     for the HTML5 is the original English version and this Japanese
59     translation is non‐normative.
60 wakaba 1.3
61     <p>日本語訳は <a href="edit/" rel=edit>Web 界面</a>を使って編集できます。
62     編集結果はおよそ3時間おきに反映されます。
63     また、原文の変更には毎日自動的に追随しています。
64    
65 wakaba 1.8 <p lang=en>The Japanese text can be edited using the <a href="edit/" rel=edit>Web
66 wakaba 1.3 interface</a>. Any modifications will be reflected to this translation
67     in about three hours. Note that any changes to the original specification
68     will automatically be incorporated to this translation every day.
69 wakaba 1.1 </ins>
70    
71     <p><span><!-- dummy --></span></p>
72    
73     <dl>
74     <dt><span class=ja-translation lang=ja><ins class=ja-note>原文の</ins>この版</span><dd><a
75 wakaba 1.13 href="http://www.whatwg.org/specs/web-workers/current-work/">http://whatwg.org/ww</a>
76 wakaba 1.1
77     <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
78     href="http://twitter.com/WHATWG">http://twitter.com/WHATWG</a></span><dd>Commit-Watchers mailing list: <a
79     href="http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org">http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org</a>
80    
81     <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
82     href="http://www.whatwg.org/mailing-list">[email protected]</a></span><dd><span class=ja-translation lang=ja>フィードバックの閲覧・投票: <a
83     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]
84     </dl>
85    
86     <p class=copyright>&copy; Copyright 2004-2008 Apple Computer, Inc.,
87     Mozilla Foundation, and Opera Software ASA.</p>
88    
89     <p class=copyright>You are granted a license to use, reproduce and create
90     derivative works of this document.</p>
91     </div>
92    
93     <hr>
94    
95     <h2 class="no-num no-toc" id=abstract><span class=ja-translation lang=ja>概要</span></h2>
96    
97 wakaba 1.14 <p><span class=ja-translation lang=ja>この仕様書は、 Web アプリケーションで、主たる頁とは並列に、
98     背景労働者スクリプトを走らせるための API を定義します。
99     これにより、メッセージ・パッシングによるスレッド的操作を協調機構として利用できるようになります。</span><h2 class="no-num no-toc" id=status><span class=ja-translation lang=ja>この文書の状態</span></h2>
100 wakaba 1.1
101     <p><span class=ja-translation lang=ja><strong>この文書は作業中です!</strong>
102     この文書は、コメントへの対応や通常の開発の過程として、
103     毎時毎分とは言い過ぎですが毎日のペースで変更されています。
104     コメントは非常に歓迎していますので、
105     <a href="mailto:[email protected]">[email protected]</a>
106     へお送りください。よろしくお願いします。</span><p><span class=ja-translation lang=ja>現在の焦点は、第1案の開発です。</span><p><span class=ja-translation lang=ja>実装者は、この仕様書が安定していないことに注意するべきです。
107     <strong>実装者は議論に参加しておかないと、
108     仕様がその実装とは非互換に変更されてしまうかもしれません。</strong>
109     この仕様書がいずれ実装呼び掛けの段階に達するのよりも前にこの仕様を実装したい販売者は、
110 wakaba 1.7 <a href="http://www.whatwg.org/mailing-list">WHATWG メイリング・リスト</a>に参加し、
111 wakaba 1.1 議論に加わるべきです。</span><p><span class=ja-translation lang=ja>この仕様書は <a
112     href="http://www.w3.org/html/wg">W3C HTML WG</a>
113     によっても出版されています。2つの仕様書の目次以降は同一です。</span><h2 class="no-num no-toc" id=contents><span class=ja-translation lang=ja>目次
114     </span></h2>
115     <!--begin-toc-->
116    
117     <ul class=toc>
118     <li><a href="#introduction"><span class=secno>1. </span>Introduction</a>
119     <ul class=toc>
120 wakaba 1.9 <li><a href="#tutorial"><span class=secno>1.1 </span>Tutorial</a>
121 wakaba 1.1
122 wakaba 1.4 <li><a href="#requirements"><span class=secno>1.2
123     </span>Requirements</a>
124 wakaba 1.1
125 wakaba 1.9 <li><a href="#conformance"><span class=secno>1.3 </span>Conformance
126 wakaba 1.1 requirements</a>
127     <ul class=toc>
128 wakaba 1.9 <li><a href="#dependencies"><span class=secno>1.3.1
129 wakaba 1.1 </span>Dependencies</a>
130     </ul>
131    
132 wakaba 1.9 <li><a href="#terminology"><span class=secno>1.4 </span>Terminology</a>
133     </ul>
134    
135 wakaba 1.13 <li><a href="#infrastructure"><span class=secno>2.
136     </span>Infrastructure</a>
137 wakaba 1.9 <ul class=toc>
138     <li><a href="#the-windowworker"><span class=secno>2.1 </span>The
139     <code>WindowWorker</code> interface</a>
140    
141     <li><a href="#the-queue"><span class=secno>2.2 </span>The queue of
142     events</a>
143    
144 wakaba 1.11 <li><a href="#the-workers"><span class=secno>2.3 </span>The worker's
145     ports</a>
146    
147     <li><a href="#processing"><span class=secno>2.4 </span>Processing
148 wakaba 1.9 model</a>
149 wakaba 1.13
150     <li><a href="#creating"><span class=secno>2.5 </span>Creating
151     workers</a>
152 wakaba 1.9 </ul>
153    
154 wakaba 1.13 <li><a href="#apis-available"><span class=secno>3. </span>APIs available
155     to workers</a>
156 wakaba 1.1
157     <li class=no-num><a href="#references">References</a>
158    
159     <li class=no-num><a href="#acknowledgements">Acknowledgements</a>
160     </ul>
161     <!--end-toc-->
162    
163     <hr>
164    
165 wakaba 1.3 <h2 id=introduction><span class=ja-translation lang=ja><span class=secno>1. </span>はじめに</span></h2>
166 wakaba 1.1
167 wakaba 1.12 <h3 id=tutorial><span class=ja-translation lang=ja><span class=secno>1.1 </span>解説</span></h3>
168 wakaba 1.1
169 wakaba 1.9 <p><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><p class=big-issue>This section is missing.
170    
171     <h3 id=requirements><span class=ja-translation lang=ja><span class=secno>1.2 </span>要件</span></h3>
172 wakaba 1.1
173 wakaba 1.6 <p><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><p><span class=ja-translation lang=ja>この仕様書は、次に示す利用事例と要件に取り組むことを目指します。</span><ul>
174     <li><span class=ja-translation lang=ja>背景労働者: Web アプリケーションは、そのデータを鯖と同期しておく必要があります。
175     これは、鯖への更新の送信と鯖からの更新の両方を含み、
176     アプリケーションがオフラインとなった時の更新のバッファリングの取扱いも含みます。
177     そのための符号は利用者界面の符号とは独立しているのが理想でしょう。</span><li><span class=ja-translation lang=ja>URL: 労働者は、文字列からではなく、 URL から生み出される<em class=rfc2119 title="SHOULD">べきです</em>。
178 wakaba 1.14 スクリプトはそれ自体の出典へのアクセスを滅多に有しないからです。</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> オブジェクトや
179 wakaba 1.6 <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>。
180 wakaba 1.14 例えば、労働者自体の中で労働者を現すオブジェクトと労働者を作成した文脈で労働者を表すオブジェクトは異なる<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 と何らかの権限 (例えば、
181     住所録へは追加するが読まない) を保証する接続を折衝することが可能である<em class=rfc2119 title="SHOULD">べきです</em>。</span><li><span class=ja-translation lang=ja>委譲: ある労働者が別の労働者を生み出した上で、呼び出し元が委譲に気づかず、
182 wakaba 1.6 かつ元の労働者がすべてのメッセージを仲介せずに、
183 wakaba 1.14 元の労働者に対する要求を効率的に委譲することができる<em class=rfc2119 title="SHOULD">べきです</em>。</span><li><span class=ja-translation lang=ja>親が有用ではなくなった労働者は殺される<em class=rfc2119 title="SHOULD">べきです</em>。
184 wakaba 1.6 労働者はこれが起こることを検知して華麗に終了することができる<em class=rfc2119 title="SHOULD">べきです</em>。</span></ul>
185 wakaba 1.4
186 wakaba 1.9 <h3 id=conformance><span class=ja-translation lang=ja><span class=secno>1.3 </span>適合性要件</span></h3>
187 wakaba 1.1
188     <p><span class=ja-translation lang=ja>この仕様書のすべての図、例、注意書きは、
189     規定の一部ではないと明記された節すべてと同様に、
190     規定の一部ではありません。
191     この仕様書のそれ以外のすべては規定の一部です。</span><p><span class=ja-translation lang=ja>この文書の規定の部分にあるキーワード「<em class=rfc2119 title="MUST">しなければなりません</em>」、
192     「<em class=rfc2119 title="MUST NOT">してはなりません</em>」、
193     「<em class=rfc2119 title="REQUIRED">必須です</em>」、「<em class=rfc2119 title="SHOULD">するべきです</em>」、
194     「<em class=rfc2119 title="SHOULD NOT">するべきではありません</em>」、
195     「<em class=rfc2119 title="RECOMMENDED">推奨します</em>」、「<em class=rfc2119 title="MAY">して構いません</em>」、
196     「<em class=rfc2119 title="OPTIONAL">任意です</em>」は、 RFC 2119 で説明されているように解釈します。
197     可読性の観点から、この仕様書<ins class=ja-note>の原文</ins>では、
198     これらの語<ins class=ja-note>の原語</ins>はすべて大文字では表記しません。
199     <a href="#refsRFC2119">[RFC2119]</a></span></p>
200     <!-- XXX but they should be
201     marked up -->
202    
203     <p><span class=ja-translation lang=ja>算法の一部として<ins class=ja-note>動作の指示の形で (原文では</ins>命令形で<ins class=ja-note>) </ins>記述された要件
204     (例えば「先頭の間隔文字をすべて除去します」や「偽を返し、これらの段階を停止します」)
205     は、算法の紹介で使われたキーワード (<em class=rfc2119 title="MUST">しなければなりません</em>、
206     <em class=rfc2119 title="SHOULD">するべきです</em>、<em class=rfc2119 title="MAY">して構いません</em>など) の意味により解釈します。</span><p><span class=ja-translation lang=ja>いくつかの適合性要件は属性やメソッドやオブジェクトの要件として説明されています。
207     そのような要件は、利用者エージェントに関する要件として解釈します。</span><p><span class=ja-translation lang=ja>算法や特定の段階として説明されている適合性要件は、
208     最終的な結果が等価である限り、任意の方法で実装して<em class=rfc2119 title="MAY">構いません</em>。
209     (特に、この仕様書で定義されている算法は追うのを簡単にしており、
210     高性能であることを目指してはいません。)</span><p><span class=ja-translation lang=ja>この仕様書で定義される適合性の級は、利用者エージェントのみです。</span><p><span class=ja-translation lang=ja>利用者エージェントは、サービス拒否攻撃を防ぐため、
211     記憶容量を使い尽くすことを防ぐため、
212     あるいは環境特有の制限に対応するためなどの目的で、
213 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>
214 wakaba 1.1
215     <p><span class=ja-translation lang=ja>この仕様書は他のいくつかの下位仕様書に依存しています。</span><dl>
216     <dt>HTML5
217    
218     <dd>
219     <p><span class=ja-translation lang=ja>HTML5 の多くの基礎的な概念をこの仕様書で使用します。
220     <a href="#refsHTML5">[HTML5]</a></span></p>
221    
222     <dt>ECMAScript
223    
224     <dd>
225     <p><span class=ja-translation lang=ja>この仕様書はスクリプト言語として JavaScript
226     を使うことを想定しています。 <a href="#refsJS">[JS]</a></span></p>
227    
228     <dt>WebIDL
229    
230     <dd>
231 wakaba 1.5 <p><span class=ja-translation lang=ja>この仕様書の IDL ブロックは WebIDL 仕様書における意味を用います。 <a href="#refsWebIDL">[WebIDL]</a></span></p>
232 wakaba 1.1 </dl>
233    
234 wakaba 1.9 <h3 id=terminology><span class=ja-translation lang=ja><span class=secno>1.4 </span>用語</span></h3>
235 wakaba 1.1
236     <p><span class=ja-translation lang=ja>簡単のため、<em>示す</em>、<em>表示する</em>、
237     <em>可視</em>などの用語を文書が利用者に対してレンダリングされる方法に言及する時に使うことがあります。
238     これらの語は視覚媒体を暗示することを意図していません。
239 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>
240     は実際には界面) を時々使いますが、より正確な「界面 <code title="">Foo</code>
241     を実装しているオブジェクト」の代わりに用いています。</span><p><span class=ja-translation lang=ja>DOM という語は、 Web アプリケーションでスクリプトに利用可能とされている API
242 wakaba 1.1 の集合を指して用い、必ずしも DOM 中核仕様書で定義されている実際の
243     <code>Document</code> オブジェクトその他の <code>Node</code>
244     オブジェクトの存在を暗示してはいません。<a
245     href="#refsDOM3CORE">[DOM3CORE]</a></span><p><span class=ja-translation lang=ja>DOM 属性は、その値が (例えば著者のスクリプトにより) 取り出される時<em>取得される</em>といい、
246     新しい値がその属性に割り当てられる時<em>設定される</em>といいます。</span><p><span class=ja-translation lang=ja>DOM オブジェクトが<dfn id=live>生きている</dfn>という場合、
247     そのオブジェクトを返す属性は常に同じオブジェクトを返さなければ<em class=rfc2119 title="MUST">ならない</em>
248     (毎回新しいオブジェクトを返すのではなく) 上に、
249     そのオブジェクトの属性やメソッドがそのオブジェクトの裏にある実際のデータのスナップ写真ではなく、
250 wakaba 1.10 データそのものに対して操作されなければ<em class=rfc2119 title="MUST">ならない</em>ことを意味します。
251 wakaba 1.14 </span><h2 id=infrastructure><span class=ja-translation lang=ja><span class=secno>2. </span>基盤</span></h2>
252 wakaba 1.9
253 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>
254 wakaba 1.9
255     <pre
256     class=idl>[NoInterfaceObject] interface <dfn id=windowworker>WindowWorker</dfn> {
257 wakaba 1.13 readonly attribute DOMString <a href="#url" title=dom-WindowWorker-URL>URL</a>;
258     readonly attribute DOMString <a href="#name" title=dom-WindowWorker-name>name</a>;
259     readonly attribute boolean <a href="#closing" title=dom-WindowWorker-closing>closing</a>;
260     void <a href="#close" title=dom-WindowWorker-close>close</a>();
261 wakaba 1.11
262     // event handler attributes
263 wakaba 1.13 attribute <span>EventListener</span> <a href="#onattach" title=handler-WindowWorker-onattach>onattach</a>;
264     attribute <span>EventListener</span> <a href="#onunload" title=handler-WindowWorker-onunload>onunload</a>;
265 wakaba 1.9 };</pre>
266    
267 wakaba 1.14 <p><span class=ja-translation lang=ja><dfn id=url title=dom-WindowWorker-URL><code>URL</code></dfn>
268     属性は、 <code><a
269     href="#windowworker">WindowWorker</a></code>
270     オブジェクトが「<a
271     href="#run-a">労働者を走らせる</a>」算法で作成された時に割り当てられた値を返さなければ<em class=rfc2119 title="MUST">なりません</em>。
272     その値は、労働者を初期化するために使用されたスクリプトの絶対 URL を表します。</span><p><span class=ja-translation lang=ja><dfn id=name title=dom-windowworker-name><code>name</code></dfn>
273     属性は、<code><a
274     href="#windowworker">WindowWorker</a></code> オブジェクトが「<a
275     href="#run-a">労働者を走らせる</a>」算法で作成された時に割り当てられた値を返さなければ<em class=rfc2119 title="MUST">なりません</em>。この値が空文字列でなければ、
276     その値は、 <code
277 wakaba 1.13 title=dom-WindowWorkerCreators-createNamedWorker><a
278 wakaba 1.14 href="#createnamedworker">createNamedWorker()</a></code>
279     メソッドを使って労働者への参照を得るために使うことができる名前を表します。</span><p>The <dfn id=closing
280 wakaba 1.13 title=dom-WindowWorker-closing><code>closing</code></dfn> attribute must
281 wakaba 1.9 return false until the "<a href="#kill-a">kill a worker</a>" processing
282     model defined below sets it to false.
283    
284 wakaba 1.12 <p><span class=ja-translation lang=ja>次に示すのは、 <code><a
285     href="#windowworker">WindowWorker</a></code>
286     界面を実装するオブジェクトが対応しなければ<em class=rfc2119 title="MUST">ならない</em>事象取扱器 DOM 属性です。</span><dl>
287 wakaba 1.13 <dt><dfn id=onattach
288     title=handler-WindowWorker-onattach><code>onattach</code></dfn>
289 wakaba 1.11
290     <dd>
291 wakaba 1.13 <p><span class=ja-translation lang=ja><code title=event-WindowWorker-attach>attach</code> 事象が当該 <code><a href="#windowworker">WindowWorker</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
292 wakaba 1.12 呼び出されなければなりません。</span><dt><dfn id=onunload
293 wakaba 1.13 title=handler-WindowWorker-onunload><code>onunload</code></dfn>
294 wakaba 1.11
295     <dd>
296 wakaba 1.12 <p><span class=ja-translation lang=ja><code title=event-unload>unload</code> 事象が当該 <code><a href="#windowworker">WindowWorker</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
297     呼び出されなければなりません。</span></dl>
298 wakaba 1.11
299 wakaba 1.10 <h3 id=the-queue><span class=ja-translation lang=ja><span class=secno>2.2 </span>事象の待ち行列</span></h3>
300 wakaba 1.9
301 wakaba 1.10 <p><span class=ja-translation lang=ja>各 <code><a href="#windowworker">WindowWorker</a></code> オブジェクトは、
302 wakaba 1.12 <dfn id=queue>事象の待ち行列</dfn> (はじめは空) と関連付けられています。</span><p><span class=ja-translation lang=ja>待ち行列中の事象は、 DOM 事象か小休止呼び戻しのいずれかです。</span><p><span class=ja-translation lang=ja>労働者中で呼び出しまたは発送されるすべての非同期の呼び戻しと事象は、
303     作業者の待ち行列に追加されなければなりません。
304     ただし、実際の呼び戻しの呼び出しや事象の発送は、後述の「<a
305 wakaba 1.14 href="#run-a">労働者を走らせる</a>」処理モデルに従い処理されます。</span><p><span class=ja-translation lang=ja>一旦 <code><a href="#windowworker">WindowWorker</a></code> の <code
306     title=dom-windowworker-closing><a href="#closing">closing</a></code>
307     属性が真に設定されると、待ち行列は、以後追加されるべきものがあっても、
308     すべて捨てなければ<em class=rfc2119 title="MUST">なりません</em>。実効的には、一旦 <code
309     title=dom-windowworker-closing><a href="#closing">closing</a></code>
310     属性が真となると、タイマーが発火を停止したり、
311     すべての未決の非同期処理に関する通知は捨てられたりするようになるなどします。</span><h3 id=the-workers><span class=ja-translation lang=ja><span class=secno>2.3 </span>労働者のポート</span></h3>
312 wakaba 1.11
313 wakaba 1.14 <p><span class=ja-translation lang=ja>労働者は、メッセージ通信路とその <code>MessagePort</code>
314 wakaba 1.12 オブジェクトを通じて、他の労働者や閲覧文脈と通信します。</span><p><span class=ja-translation lang=ja>各 <code><a href="#windowworker">WindowWorker</a></code> <var
315     title="">worker</var> は、<dfn id=the-workers0>労働者のポート</dfn>の並びを持ちます。
316     これは、他のポートと絡められており、かつ <code title=dom-MessagePort-ownerWindow>ownerWindow</code>
317     が <var
318     title="">worker</var> であるポートを1つ (だけ) 持つような <code>MessagePort</code>
319     オブジェクトすべてを含むものです。この並びは<a href="#queue">事象の待ち行列</a>中で未決の事象中にある
320     <code>MessagePort</code> オブジェクトすべてを含みます。</span><h3 id=processing><span class=ja-translation lang=ja><span class=secno>2.4 </span>処理モデル</span></h3>
321    
322     <p><span class=ja-translation lang=ja>利用者エージェントが、<span>URL</span> <var
323     title="">url</var>、閲覧文脈 <var title="">owner browsing
324     context</var>、<code>Document</code> <var title="">owner
325     document</var> のスクリプトに対する、 <var
326 wakaba 1.14 title="">name</var> と名付けられた<dfn id=run-a>労働者を走らせる</dfn>、
327 wakaba 1.12 という時には、利用者エージェントは、次の段階を、完全に分離された並列実行環境で実行しなければ<em class=rfc2119 title="MUST">なりません</em>。</span><ol>
328     <li>
329     <p><span class=ja-translation lang=ja><var title="">url</var> で識別される資源を取って来ようと試みます。</span></p>
330    
331 wakaba 1.14 <p><span class=ja-translation lang=ja>この試みが失敗した場合、これらの段階を停止し、この段階を呼び出した算法が定義する<a
332     href="#worker" title="worker creation failed">誤り取扱段階</a>を呼び出します。</span></p>
333 wakaba 1.12
334     <p><span class=ja-translation lang=ja>この試みが成功した場合、 <var title="">script</var>
335     を得られた資源とします。</span></p>
336    
337     <p class=note><span class=ja-translation lang=ja><code>script</code> 要素と同様に、スクリプトの MIME 型は無視します。
338     <code>script</code> 要素とは異なり、
339     型を上書きする方法はありません。スクリプトは常に JavaScript
340     と仮定します。</span></p>
341 wakaba 1.11 <!-- XXX people will complain about
342     this. I guess we might want to examine the MIME type... -->
343    
344    
345     <li>
346 wakaba 1.12 <p><span class=ja-translation lang=ja>新しい <code><a href="#windowworker">WindowWorker</a></code>
347     オブジェクト <var title="">window</var> を作成します。</span></p>
348 wakaba 1.9
349     <li>
350 wakaba 1.14 <p><span class=ja-translation lang=ja><var title="">window</var> の
351     <code title=dom-WindowWorker-URL><a href="#url">URL</a></code>
352     属性を <var
353     title="">url</var> の値に設定します。</span></p>
354 wakaba 1.13
355     <li>
356 wakaba 1.14 <p><span class=ja-translation lang=ja><var title="">window</var> の <code title=dom-WindowWorker-name><a
357     href="#name">name</a></code>
358     属性を <var title="">name</var> の値に設定します。</span></p>
359 wakaba 1.9
360     <li>
361 wakaba 1.12 <p><span class=ja-translation lang=ja><var title="">script</var> のスクリプト実行文脈 (と大域オブジェクトも)
362     を <var
363     title="">window</var> とします。</span></p>
364 wakaba 1.9
365     <li>
366 wakaba 1.12 <p><span class=ja-translation lang=ja><var title="">script</var> のスクリプト閲覧文脈を <var title="">owner browsing context</var>
367     とします。</span></p>
368 wakaba 1.9
369     <li>
370 wakaba 1.12 <p><span class=ja-translation lang=ja><var title="">script</var> のスクリプト文書文脈を <var title="">owner document</var>
371     とします。</span></p>
372 wakaba 1.9
373     <li>
374 wakaba 1.14 <p><span class=ja-translation lang=ja>この段階を呼び出す算法が定義する<a href="#success" title="worker creation
375     succeeded">成功段階</a>を呼び出します。
376     (これは、<a href="#queue">事象の待ち行列</a>)
377     に事象を追加します。)</span></p>
378 wakaba 1.13
379     <li>
380 wakaba 1.14 <p><span class=ja-translation lang=ja><var title="">worker</var> の監視を開始し、
381     <var title="">window</var> オブジェクトの <code
382 wakaba 1.13 title=dom-WindowWorker-closing><a href="#closing">closing</a></code>
383 wakaba 1.14 属性が偽であって、かつすべての<a href="#the-workers0">労働者のポート</a>の
384     <code title=dom-MessagePort-active>active</code>
385     属性が偽に設定されているという時に、 <code
386 wakaba 1.13 title=dom-WindowWorker-closing><a href="#closing">closing</a></code>
387 wakaba 1.14 属性が真に切り替わるまで、
388     または<a href="#the-workers0">労働者のポート</a>の並びのいずれか1つの
389     <code>MessagePort</code> オブジェクトの <code title=dom-MessagePort-active>active</code>
390     属性の値が真となるまでのいずれかの間、
391     利用者エージェントがスクリプトを一時停止するようにします。</span></p>
392 wakaba 1.11
393     <li>
394 wakaba 1.14 <p><span class=ja-translation lang=ja><var title="">worker</var> の監視を開始し、<a href="#the-workers0">労働者のポート</a>の並びが空になると即座に
395     <var title="">window</var> オブジェクトの <code
396 wakaba 1.13 title=dom-WindowWorker-closing><a href="#closing">closing</a></code>
397 wakaba 1.14 属性が真に設定されるようにします。</span></p>
398 wakaba 1.11
399     <li>
400 wakaba 1.14 <p><span class=ja-translation lang=ja><var title="">script</var> を、返るか、例外の捕獲に失敗するか、後述の「<a href="#kill-a">労働者を殺す</a>」算法により早々に停止させられるかのいずれかまで走らせます。</span></p>
401 wakaba 1.11
402 wakaba 1.14 <p class=note><span class=ja-translation lang=ja>スクリプトが「<a href="#kill-a">労働者を殺す</a>」算法で停止させられる場合には、
403     その同じ算法が、次の段階で、<a href="#queue">事象の待ち行列</a>には唯一
404     <code title=message-unload>unload</code> 事象だけが含まれるようにします。
405     しかし、この事象が無視された場合には、これは、ポートがごみ収集される際に真となります。</span></p>
406 wakaba 1.9
407     <li>
408 wakaba 1.14 <p><span class=ja-translation lang=ja><i>事象ループ</i>: <var
409     title="">window</var> に関連付けられた<a
410     href="#queue">事象の待ち行列</a>に事象が存在するようになるか、または
411     <var title="">window</var> オブジェクトの <code
412 wakaba 1.13 title=dom-WindowWorker-closing><a href="#closing">closing</a></code>
413 wakaba 1.14 属性が真に設定されるまで待ちます。</span></p>
414 wakaba 1.9
415     <li>
416 wakaba 1.14 <p><span class=ja-translation lang=ja><a href="#queue">事象の待ち行列</a>中で最古の事象か呼び戻しがあれば、
417     これを発送します。この事象の取扱いや呼び戻しの実行は、後述の「<a href="#kill-a">労働者を殺す</a>」
418     算法により、早々に停止させられるかもしれません。</span></p>
419 wakaba 1.9
420     <li>
421 wakaba 1.14 <p><span class=ja-translation lang=ja><a href="#queue">事象の待ち行列</a>中に更に事象が存在する場合、
422     または <var title="">window</var> オブジェクトの <code
423 wakaba 1.13 title=dom-WindowWorker-closing><a href="#closing">closing</a></code>
424 wakaba 1.14 属性が偽に設定されている場合、前述の<i>事象ループ</i>との名札のある段階に飛んで戻ります。</span></p>
425 wakaba 1.9
426     <li>
427 wakaba 1.14 <p class=big-issue><span class=ja-translation lang=ja>タイマー、休憩、 XMLHttpRequest、データベース取引、その他を殺さなければ<em class=rfc2119 title="MUST">なりません</em>。
428     ポートを非活性化し、ほどかなければ<em class=rfc2119 title="MUST">なりません</em> (unload を送りません)。</span></p>
429 wakaba 1.9 </ol>
430    
431     <hr>
432    
433 wakaba 1.14 <p><span class=ja-translation lang=ja>利用者エージェントが<dfn id=kill-a>労働者を殺す</dfn>という時には、
434     利用者エージェントは、次の段階を労働者の主たるループ (先に定義した「<a
435     href="#run-a">労働者を走らせる</a>」処理モデル) と並列に走らせなければ<em class=rfc2119 title="MUST">なりません</em>。</span><ol>
436     <li>
437     <p><span class=ja-translation lang=ja>事象名が <code
438     title=event-unload>unload</code> であり、
439     泡立たず、取消可能ではない
440     <code>Event</code> オブジェクトを作成し、労働者の <code><a
441     href="#windowworker">WindowWorker</a></code>
442     オブジェクトの<a
443     href="#queue">事象の待ち行列</a>に追加し、 <code><a
444     href="#windowworker">WindowWorker</a></code>
445     オブジェクト自体を対象とします。</span><li>
446     <p><span class=ja-translation lang=ja>労働者の <code><a href="#windowworker">WindowWorker</a></code>
447     オブジェクトの
448     <code title=dom-WindowWorker-closing><a
449     href="#closing">closing</a></code>
450     属性を真に設定します。</span><li>
451     <p><span class=ja-translation lang=ja>利用者エージェント定義の時間、待ちます。先に定義した「<a href="#run-a">労働者を走らせる</a>」
452     処理モデルが <code title=event-unload>unload</code>
453     事象に登録された事象聴取器を即座に走らせ始める場合には、この時間は零である<em class=rfc2119 title="SHOULD NOT">べきではありません</em>。
454     というのは、予期せず停止させる時に浄化するために <code
455     title=event-unload>unload</code> 事象を使えるようにするのが目的だからです。</span><li>
456     <p><span class=ja-translation lang=ja><a href="#queue">事象の待ち行列</a>中にこの算法が追加した
457     <code title=event-unload>unload</code>
458     事象以外の事象が存在する場合には、それらを発送せずに捨てます。</span><li>
459     <p><span class=ja-translation lang=ja>この算法が追加した <code title=event-unload>unload</code>
460     事象がまだ発送されていなければ、現在労働者中で走っているスクリプトを停止します。</span><li>
461     <p><span class=ja-translation lang=ja>利用者エージェント定義の時間、待ちます。</span><li>
462     <p><span class=ja-translation lang=ja>現在労働者中で走っているスクリプト (スクリプトが走っているとすると、
463     これは <code
464     title=event-unload>unload</code>
465     事象の取扱器です。) を停止します。</span></ol>
466 wakaba 1.9
467 wakaba 1.11 <hr>
468    
469 wakaba 1.14 <p><span class=ja-translation lang=ja>スクリプトが <code><a href="#windowworker">WindowWorker</a></code>
470     オブジェクトで <dfn id=close
471     title=dom-WindowWorker-close><code>close()</code></dfn>
472     メソッドを呼び出した場合、利用者エージェントは、次の段階を走らせなければ<em class=rfc2119 title="MUST">なりません</em>。
473 wakaba 1.11
474 wakaba 1.14 </span><ol>
475 wakaba 1.11 <li>
476     <p>Create an <code>Event</code> object with the event name <code
477     title=event-unload>unload</code>, which does not bubble and is not
478     cancelable, and add it to the <code><a
479     href="#windowworker">WindowWorker</a></code> object's <a
480     href="#queue">queue of events</a>, targetted at the <code><a
481     href="#windowworker">WindowWorker</a></code> object itself.
482    
483     <li>
484 wakaba 1.14 <p><span class=ja-translation lang=ja>労働者の <code><a href="#windowworker">WindowWorker</a></code>
485     オブジェクトの
486     <code title=dom-WindowWorker-closing><a
487     href="#closing">closing</a></code>
488     属性を真に設定します。</span><li>
489 wakaba 1.11 <p>For each <code>MessagePort</code> object that is entangled with
490     another port and that has one (but only one) port whose <code
491     title=dom-MessagePort-ownerWindow>ownerWindow</code> is the <code><a
492     href="#windowworker">WindowWorker</a></code> object on which the method
493     was invoked, run the following substeps:</p>
494    
495     <ol>
496     <li>
497     <p>Unentangle the two ports.
498    
499     <li>
500     <p>Set both ports' <code title=dom-MessagePort-active>active</code>
501     attribute to false.
502    
503     <li>
504     <p>At the next available opportunity, after any scripts have finished
505     executing<!-- XXX queue -->, <span>fire a simple event</span> called
506     <code title=event-unload>unload</code> at the other port (the one
507     whose <code title=dom-MessagePort-ownerWindow>ownerWindow</code> is
508     not the <code><a href="#windowworker">WindowWorker</a></code> object
509 wakaba 1.13 on which the <code title=dom-WindowWorker-close><a
510 wakaba 1.11 href="#close">close()</a></code> method was called).
511     </ol>
512     </ol>
513    
514 wakaba 1.13 <h3 id=creating><span class=secno>2.5 </span>Creating workers</h3>
515 wakaba 1.9
516     <pre
517     class=idl>[NoInterfaceObject] interface <dfn id=windowworkercreators>WindowWorkerCreators</dfn> {
518 wakaba 1.13 <span>MessagePort</span> <a href="#createworker" title=dom-WindowWorkerCreators-createWorker>createWorker</a>(in DOMString scriptURL);
519     <span>MessagePort</span> <a href="#createnamedworker" title=dom-WindowWorkerCreators-createNamedWorker>createNamedWorker</a>(in DOMString name, in DOMString scriptURL);
520 wakaba 1.9 };</pre>
521    
522     <p>Objects that implement the <code>Window</code> interface must also
523     implement the <code><a
524     href="#windowworkercreators">WindowWorkerCreators</a></code> interface.
525 wakaba 1.11
526     <hr>
527    
528 wakaba 1.13 <p>When the <dfn id=createworker
529     title=dom-WindowWorkerCreators-createWorker><code>createWorker(<var
530     title="">scriptURL</var>)</code></dfn> method is invoked, the user agent
531     must run the following steps:
532 wakaba 1.11
533     <ol>
534 wakaba 1.13 <li>
535     <p><span title="resolve a url">Resolve</span> the <var
536     title="">scriptURL</var> argument.
537    
538     <li>
539     <p>If this fails, throw a <code>SYNTAX_ERR</code> exception.
540    
541     <li>
542     <p>If the <span>origin</span> of the resulting <span>absolute URL</span>
543     is not the <span title="same origin">same</span> as the origin of the
544     script that invoked the method, then throw a <span>security
545     exception</span>.
546    
547     <li>
548     <p><a href="#create">Create a worker</a> from the resulting
549     <span>absolute URL</span> whose name is the empty string.
550    
551     <li>
552     <p>Return the <code>MessagePort</code> object returned from the <a
553     href="#create">create a worker</a> algorithm.
554 wakaba 1.11 </ol>
555    
556     <hr>
557    
558 wakaba 1.13 <p>When the <dfn id=createnamedworker
559     title=dom-WindowWorkerCreators-createNamedWorker><code>createNamedWorker(<var
560     title="">name</var>, <var title="">scriptURL</var>)</code></dfn> method is
561     invoked, the user agent must run the following steps:
562 wakaba 1.11
563     <ol>
564 wakaba 1.13 <li>
565     <p><span title="resolve a url">Resolve</span> the <var
566     title="">scriptURL</var> argument.
567    
568     <li>
569     <p>If this fails, throw a <code>SYNTAX_ERR</code> exception.
570    
571     <li>
572     <p>If the <span>origin</span> of the resulting <span>absolute URL</span>
573     is not the <span title="same origin">same</span> as the origin of the
574     script that invoked the method, then throw a <span>security
575     exception</span>.
576    
577     <li>
578     <p>If the <var title="">name</var> argument is the empty string, <a
579     href="#create">create a worker</a> from the resulting <span>absolute
580     URL</span>, whose name is the empty string, and return the
581     <code>MessagePort</code> object returned from the <a
582     href="#create">create a worker</a> algorithm. Then, abort these steps.
583    
584     <li>
585     <p>If there exists a worker whose <code title=dom-WindowWorker-closing><a
586     href="#closing">closing</a></code> attribute is false, whose <code
587     title=dom-WindowWorker-name><a href="#name">name</a></code> attribute is
588     exactly equal to the <var title="">name</var> argument, and whose <code
589     title=dom-WindowWorker-URL><a href="#url">URL</a></code> attribute has
590     the <span>same origin</span> as the resulting <span>absolute URL</span>,
591     then run these substeps:</p>
592    
593     <ol>
594     <li>
595     <p>If that worker's <code title=dom-WindowWorker-URL><a
596     href="#url">URL</a></code> attribute is not exactly equal to the
597     resulting <span>absolute URL</span>, then throw a
598     <code>URL_MISMATCH_ERR</code> exception and abort these steps. <span
599     class=big-issue>code 19</span>
600    
601     <li>
602     <p><span>Create a new <code>MessagePort</code> object</span> owned by
603     the <span>script execution context</span> of the script that invoked
604     the method.
605    
606     <li>
607     <p>Return that port.
608    
609     <li>
610     <p>Asynchronously, <a href="#attach" title="attach to a
611     worker">attach</a> to this preexisting worker, with the newly created
612     port.
613     </ol>
614    
615     <p>Otherwise, <a href="#create">create a worker</a> from the resulting
616     <span>absolute URL</span>, whose name is the value of the <var
617     title="">name</var> argument, and return the <code>MessagePort</code>
618     object returned from the <a href="#create">create a worker</a>
619     algorithm.</p>
620 wakaba 1.11 </ol>
621    
622     <hr>
623    
624 wakaba 1.13 <p>The steps to <dfn id=create>create a worker</dfn> from a
625     <span>URL</span> <var title="">url</var> and whose name is <var
626     title="">name</var>, in the context of a method call, are as follows:
627 wakaba 1.11
628     <ol>
629 wakaba 1.13 <li>
630     <p><span>Create a new <code>MessagePort</code> object</span> owned by the
631     <span>script execution context</span> of the script that invoked the
632     method.
633    
634     <li>
635     <p>Return that port.
636    
637     <li>
638     <p>In a parallel execution context (i.e. a separate thread or process or
639     equivalent construct), <a href="#run-a">run a worker</a> named <var
640     title="">name</var> for the script with <span>URL</span> <var
641     title="">url</var>, with the <span>script browsing context</span> of the
642     script that invoked the method as the <var title="">owner browsing
643     context</var> and with the <span>script document context</span> of the
644     script that invoked the method as the <var title="">owner
645     document</var>.</p>
646    
647     <p>If that algorithm invokes the steps for <dfn id=success title="worker
648     creation succeeded">success steps</dfn>, then <a href="#attach"
649     title="attach to a worker">attach</a> to this new worker, with the newly
650     created port.</p>
651    
652     <p>Otherwise, if the <dfn id=worker>worker creation failed</dfn>, then at
653     the next available opportunity, after any scripts have finished
654     executing<!-- XXX queue -->, <span>fire a simple event</span> called
655     <code title=event-error>error</code> at the newly created port.</p>
656 wakaba 1.11 </ol>
657    
658     <hr>
659    
660 wakaba 1.13 <p>The steps to <dfn id=attach>attach to a worker</dfn> given a
661     <code>MessagePort</code> object <var title="">port</var> are as follows:
662 wakaba 1.11
663     <ol>
664 wakaba 1.13 <li>
665     <p>If <var title="">port</var> would have been garbage collected, or if
666     the <span>active document</span> of the <code
667     title=dom-MessagePort-ownerWindow>ownerWindow</code> of <var
668     title="">port</var> is no longer the same <code>Document</code> object
669     as when <var title="">port</var> was created, then do nothing. Abort
670     these steps. If the worker was just created, it'll get killed
671     immediately.</p>
672    
673     <li>
674     <p><span>Create a new <code>MessagePort</code> object</span> owned by the
675     <code><a href="#windowworker">WindowWorker</a></code> of the worker.
676    
677     <li>
678     <p><span>Entangle</span> this newly created port and the port <var
679     title="">port</var> that was passed to these steps.
680    
681     <li>
682     <p>Set the <code title=dom-MessagePort-active>active</code> attribute of
683     both ports to true.
684    
685     <li>
686     <p>At the next available opportunity, after any scripts have finished
687     executing<!-- XXX queue -->, <span>fire a simple event</span> called
688     <code title=event-load>load</code> at <var title="">port</var>.
689    
690     <li>
691     <p>Create an event that uses the <code>MessageEvent</code> interface,
692     with the name <code title=event-attach>attach</code>, which does not
693     bubble, is cancelable, has no default action, has a <code
694     title=dom-MessageEvent-data>data</code> attribute whose value is the
695     empty string and has a <code
696     title=dom-MessageEvent-messagePort>messagePort</code> attribute whose
697     value is the newly created port, and add it to the worker's <code><a
698     href="#windowworker">WindowWorker</a></code> object's <a
699     href="#queue">queue of events</a>, targetted at the <code><a
700     href="#windowworker">WindowWorker</a></code> object itself.
701 wakaba 1.11 </ol>
702 wakaba 1.9
703 wakaba 1.13 <h2 id=apis-available><span class=secno>3. </span>APIs available to workers</h2>
704    
705     <p>Objects that implement the <code><a
706     href="#windowworker">WindowWorker</a></code> interface must also implement
707     the following interfaces:
708    
709     <ul>
710     <li>
711     <p>The <code>Window</code> interface, and interfaces that are required to
712     be implemented by objects implementing that interface, including:</p>
713    
714     <ul>
715     <li>The <code>WindowTimers</code> interface
716    
717     <li>The <code><a
718     href="#windowworkercreators">WindowWorkerCreators</a></code> interface
719     </ul>
720    
721     <li>The <code>EventTarget</code> interface.
722     </ul>
723 wakaba 1.9
724     <h2 class=no-num id=references><span class=ja-translation lang=ja>参考文献</span></h2>
725 wakaba 1.1
726     <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>
727     <!-- ACKS -->
728    
729 wakaba 1.14 <p><span class=ja-translation lang=ja>Maciej Stachowiak, Mike Smith の有用かつ重要なコメントに感謝します。</span><p><span class=ja-translation lang=ja>Gears チームの方々にも非常に感謝します。
730     Gears チームの方々はこの技術を開拓し、その経験はこの仕様書にも多大な影響を与えています。
731     </span>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.24