blob: fb3ba701c134be85d647ad8faa60b275b47be552 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
---
title: WebAssembly.instantiateStreaming()
slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
---
<div>{{JSRef}} {{SeeCompatTable}}</div>
<p><strong><code>WebAssembly.instantiateStreaming()</code></strong> 関数はソースのストリームから直接 WebAssembly モジュールをコンパイルしてインスタンス化します。</p>
<h2 id="構文">構文</h2>
<pre class="syntaxbox">Promise<ResultObject> WebAssembly.instantiateStreaming(<em>source</em>, <em>importObject</em>);</pre>
<h3 id="パラメータ">パラメータ</h3>
<dl>
<dt><em>source</em></dt>
<dd>コンパイルしてインスタンス化する .wasm モジュールのソースを表す {{domxref("Response")}} オブジェクトか、それをfulfillするプロミス。</dd>
<dt><em>importObject</em> {{optional_inline}}</dt>
<dd>関数や {{jsxref("WebAssembly.Module")}} オブジェクトなどの新しく生成される <code>Instance</code> にインポートされる値を持つオブジェクト。モジュール内で宣言されたインポートそれぞれに対応するプロパティが存在する必要があります。そうでない場合、{{jsxref("WebAssembly.LinkError")}} がスローされます。</dd>
</dl>
<h3 id="戻り値">戻り値</h3>
<p>解決時に次の2つのフィールドを持つ <code>ResultObject</code> を渡す <code>Promise</code>:</p>
<ul>
<li><code>module</code>: コンパイルされた {{jsxref("WebAssembly.Module")}} オブジェクト。この <code>Module</code> は再度インスタンス化することや、<a href="/en-US/docs/Web/API/Worker/postMessage">postMessage()</a> 経由で共有したり、<a href="/en-US/docs/WebAssembly/Caching_modules">IndexedDBにキャッシュ</a>することができます。</li>
<li><code>instance</code>: 全ての <a href="/en-US/docs/WebAssembly/Exported_functions">エクスポートされたWebAssembly関数</a> を含む {{jsxref("WebAssembly.Instance")}} オブジェクト。</li>
</ul>
<h3 id="例外">例外</h3>
<ul>
<li>いずれかのパラメータが正しい型、または構造でない場合、{{jsxref("TypeError")}} がスローされます。</li>
<li>失敗した場合、プロミスは失敗の原因に応じて {{jsxref("WebAssembly.CompileError")}}、{{jsxref("WebAssembly.LinkError")}} または {{jsxref("WebAssembly.RuntimeError")}} を持って棄却されます。</li>
</ul>
<h2 id="例">例</h2>
<p>次の例 (Github上のデモ <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/instantiate-streaming.html">instantiate-streaming.html</a> と、 <a href="https://mdn.github.io/webassembly-examples/js-api-examples/instantiate-streaming.html">動作例</a> を参照してください) では、ソースから .wasm モジュールを直接コンパイルしてインスタンス化しています。プロミスは <code>ResultObject</code> で fulfill されます。<code>instantiateStreaming()</code> 関数は {{domxref("Response")}} オブジェクトを渡すプロミスを受け取るので、直接 {{domxref("WindowOrWorkerGlobalScope.fetch()")}} 呼び出し結果を渡すことができます。</p>
<pre class="brush: js">var importObject = { imports: { imported_func: arg => console.log(arg) } };
WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
.then(obj => obj.instance.exports.exported_func());</pre>
<p>最後に <code>ResultObject</code> が持つ instance メンバーにアクセスして、エクスポートされた関数を実行しています。</p>
<h2 id="仕様">仕様</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('WebAssembly Embedding', '#webassemblyinstantiatestreaming', 'instantiateStreaming()')}}</td>
<td>{{Spec2('WebAssembly Embedding')}}</td>
<td>初回ドラフト定義</td>
</tr>
</tbody>
</table>
<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2>
<div>
<p>{{Compat("javascript.builtins.WebAssembly.instantiateStreaming")}}</p>
</div>
<h2 id="関連情報">関連情報</h2>
<ul>
<li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li>
<li><a href="/ja/docs/WebAssembly/Concepts">WebAssemblyのコンセプト</a></li>
<li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li>
</ul>
|