ç§»è²å¯è½ãªãã¸ã§ã¯ã (Transferable objects) ã¯ãããã³ã³ããã¹ãããå¥ã®ã³ã³ããã¹ãã¸ ç§»è² ãããã¨ãã§ãããªã½ã¼ã¹ãèªåèªèº«ã§ææãããªãã¸ã§ã¯ãã§ããã®ãªã½ã¼ã¹ãä¸åº¦ã« 1 ã¤ã®ã³ã³ããã¹ãã§ã®ã¿å©ç¨ã§ãããã¨ãä¿è¨¼ãããã®ã§ãã ç§»è²ãçµããã¨ãå ã®ãªãã¸ã§ã¯ãã¯ä½¿ããªããªãã¾ããç§»è²ããããªã½ã¼ã¹ãããæãã¦ãããããªãã¸ã§ã¯ãã®èªã¿æ¸ãããããã¨ããã¨ä¾å¤ãçºçãã¾ãã
ç§»è²å¯è½ãªãªãã¸ã§ã¯ãã¯ä¸è¬çã«ãä¸åº¦ã«åä¸ã®JavaScriptã¹ã¬ããã«ããå®å
¨ã«å
¬éãããªããªã½ã¼ã¹ãå
±æããããã«ä½¿ç¨ããã¾ãã ä¾ãã°ãArrayBuffer
ã¯ã¡ã¢ãªã¼ãããã¯ãèªåèªèº«ã§ææããç§»è²å¯è½ãªãªãã¸ã§ã¯ãã§ãã ãã®ãããªãããã¡ã¼ãã¹ã¬ããéã§ç§»è²ãããã¨ããé¢é£ããã¡ã¢ãªã¼ãªã½ã¼ã¹ã¯å
ã®ãããã¡ã¼ããåãé¢ãããæ°ããã¹ã¬ããã§ä½æããããããã¡ã¼ãªãã¸ã§ã¯ãã«è£
çããã¾ãã å
ã®ã¹ã¬ããã®ãããã¡ã¼ãªãã¸ã§ã¯ãã¯ããã¯ãã¡ã¢ãªãªã½ã¼ã¹ãææãã¦ããªãããã使ç¨ã§ããªããªãã¾ãã
ç§»è²ã¯ structuredClone()
ã§ãªãã¸ã§ã¯ãã®ãã£ã¼ãã³ãã¼ã使ããã¨ãã«ã使ç¨ãããããããã¾ããã è¤è£½æä½ã®å¾ã«ãç§»è²ããããªã½ã¼ã¹ã¯ãã³ãã¼ããããªãã¸ã§ã¯ãã«ã³ãã¼ãããã®ã§ã¯ãªããç§»åããã¾ãã
ãªãã¸ã§ã¯ãã®ãªã½ã¼ã¹ãç§»è²ããããã«ä½¿ç¨ãããã¡ã«ããºã ã¯ããªãã¸ã§ã¯ãã«ä¾åãã¾ãã ä¾ãã°ã ArrayBuffer
ãã¹ã¬ããéã§ç§»è²ãããã¨ãããããæãã¡ã¢ãªã¼ãªã½ã¼ã¹ã¯é«éã§å¹çã®è¯ãã¼ãã³ãã¼æä½ã«ãããæåéãã³ã³ããã¹ãéã§ç§»åããã¾ãã ä»ã«ããé¢é£ãããªã½ã¼ã¹ãã³ãã¼ãã¦ãå¤ãã³ã³ããã¹ãããåé¤ãããã¨ã§ããªãã¸ã§ã¯ããç§»è²ãããã¨ãã§ããå ´åãããã¾ãã
ãã¹ã¦ã®ãªãã¸ã§ã¯ããç§»è²å¯è½ãªããã§ã¯ããã¾ããã ç§»è²å¯è½ãªãªãã¸ã§ã¯ãã®ä¸è¦§ã¯ä¸è¨ã®éãã§ãã
ãªãã¸ã§ã¯ãã®ã¹ã¬ããéã®ç§»è²ä»¥ä¸ã®ã³ã¼ãã¯ãã¡ã¤ã³ã¹ã¬ããããã¦ã§ãã¯ã¼ã«ã¼ã¹ã¬ããã«ã¡ãã»ã¼ã¸ãéä¿¡ããéã«ãç§»è²ãã©ã®ããã«åä½ããã®ãã示ãã¦ãã¾ãã Uint8Array
ã¯ããããã¡ã¼ãç§»è²ããã¦ããéãã¯ã¼ã«ã¼å
ã§ã³ãã¼ããã¾ãï¼è¤è£½ããã¾ãï¼ã ç§»è²å¾ãã¡ã¤ã³ã¹ã¬ãããã uInt8Array
ãèªã¿æ¸ããããã¨ããã¨ã¨ã©ã¼ãçºçãã¾ãããbyteLength
ã調ã¹ãã¨ã¼ãã«ãªã£ããã¨ã確èªã§ãã¾ãã
// 8MB ã® "file" ã使ãã¦ä¸èº«ãåãã¾ãã 8MB = 1024 * 1024 * 8 B
const uInt8Array = new Uint8Array(1024 * 1024 * 8).map((v, i) => i);
console.log(uInt8Array.byteLength); // 8388608
// ä¸å±¤ã®ãããã¡ã¼ããã¯ã¼ã«ã¼ã«ç§»è²ãã
worker.postMessage(uInt8Array, [uInt8Array.buffer]);
console.log(uInt8Array.byteLength); // 0
ã¡ã¢: åä»ãé
å Int32Array
ã Uint8Array
ã¯ã·ãªã¢ã©ã¤ãºå¯è½ã§ãããç§»è²ã¯è¡ãã¾ããã ãããããã®ä¸ã«ãããããã¡ã¼ã¯ ArrayBuffer
ã§ãããããã¯ç§»è²å¯è½ãªãªãã¸ã§ã¯ãã§ãã data 弿°ã« uInt8Array.buffer
ãè¨å®ããã°ãç§»è²ããé
åã« uInt8Array
ããªãã¦ããéããã¨ãã§ãã¾ãã
以ä¸ã®ã³ã¼ãã¯ã structuredClone()
æä½ã§ãåºç¤ã¨ãªããããã¡ã¼ãå
ã®ãªãã¸ã§ã¯ãããè¤è£½ã«ã³ãã¼ãããæ§åã示ãã¦ãã¾ãã
const original = new Uint8Array(1024);
const clone = structuredClone(original);
console.log(original.byteLength); // 1024
console.log(clone.byteLength); // 1024
original[0] = 1;
console.log(clone[0]); // 0
// Uint8Array ãç§»è²ããã¨ãç§»è²å¯è½ãªãªãã¸ã§ã¯ãã§ã¯ãªããããä¾å¤ãçºçãã¾ãã
// const transferred = structuredClone(original, {transfer: [original]});
// Uint8Array.buffer ãªãã°ç§»è²ã§ãã¾ãã
const transferred = structuredClone(original, { transfer: [original.buffer] });
console.log(transferred.byteLength); // 1024
console.log(transferred[0]); // 1
// Uint8Array.buffer ã¯ç§»è²ããå¾ã¯ä½¿ç¨ãããã¨ãã§ãã¾ããã
console.log(original.byteLength); // 0
対å¿ãã¦ãããªãã¸ã§ã¯ã
åç¨®ä»æ§æ¸ã示ãç§»è²å¯è½ãªé ç®ã¯ä»¥ä¸ã®éãã§ãã
ArrayBuffer
MessagePort
ReadableStream
WritableStream
TransformStream
AudioData
ImageBitmap
VideoFrame
OffscreenCanvas
RTCDataChannel
ãã©ã¦ã¶ã¼ã®å¯¾å¿ã¯ãããããã®ãªãã¸ã§ã¯ãã®äºææ§æ
å ±ã® transferable
ãµãæ©è½ã§ç¤ºãå¿
è¦ãããã¾ãï¼ä¾ã¨ã㦠RTCDataChannel
ãåç
§ãã¦ãã ããï¼ã ãã®è¨äºãæ¸ãã¦ããæç¹ã§ã¯ããã¹ã¦ã®ç§»è²å¯è½ãªãªãã¸ã§ã¯ãã§ãã®æ
å ±ãæ´æ°ããã¦ããããã§ã¯ããã¾ããã
ã¡ã¢: ç§»è²å¯è½ãªãªãã¸ã§ã¯ã㯠Web IDL ãã¡ã¤ã« ã®ä¸ã§ [Transferable]
ã¨ãã屿§ã§ãã¼ã¯ã¢ããããã¦ãã¾ãã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4