36
36
* when possible. The worker communicates with its parent using postMessage.
37
37
*/
38
38
39
- use js_sys:: { encode_uri_component , Array , Promise } ;
39
+ use js_sys:: { Array , Promise } ;
40
40
use std:: cell:: RefCell ;
41
41
use std:: sync:: atomic:: AtomicI32 ;
42
42
use wasm_bindgen:: prelude:: * ;
43
43
use wasm_bindgen:: JsCast ;
44
44
use web_sys:: { MessageEvent , Worker } ;
45
45
46
- const HELPER_CODE : & ' static str = "
47
- onmessage = function (ev) {
48
- let [ia, index, value] = ev.data;
49
- ia = new Int32Array(ia.buffer);
50
- let result = Atomics.wait(ia, index, value);
51
- postMessage(result);
52
- };
53
- " ;
54
-
55
46
thread_local ! {
56
47
static HELPERS : RefCell <Vec <Worker >> = RefCell :: new( vec![ ] ) ;
57
48
}
@@ -62,11 +53,15 @@ fn alloc_helper() -> Worker {
62
53
return helper;
63
54
}
64
55
65
- let mut initialization_string = "data:application/javascript," . to_owned ( ) ;
66
- let encoded: String = encode_uri_component ( HELPER_CODE ) . into ( ) ;
67
- initialization_string. push_str ( & encoded) ;
68
-
69
- Worker :: new ( & initialization_string) . unwrap_or_else ( |js| wasm_bindgen:: throw_val ( js) )
56
+ let worker_url = wasm_bindgen:: link_to!( inline_js = "
57
+ onmessage = function (ev) {
58
+ let [ia, index, value] = ev.data;
59
+ ia = new Int32Array(ia.buffer);
60
+ let result = Atomics.wait(ia, index, value);
61
+ postMessage(result);
62
+ };
63
+ " ) . unwrap ( ) ;
64
+ Worker :: new ( & worker_url) . unwrap_or_else ( |js| wasm_bindgen:: throw_val ( js) )
70
65
} )
71
66
}
72
67
0 commit comments