javascript / expert
Snippet
Atomare ArrayBuffer-Mutationen für kopierfreie reaktive Svelte-Arrays
Standardmäßige JavaScript-Array-Mutationen in hochfrequenten reaktiven Svelte-Bindungen verursachen übermäßige Objektallokationen. Durch die Verwendung von SharedArrayBuffer mit Int32Array Typed-Views und Atomics-Operationen können binäre Arrays direkt an Ort und Stelle mit threadsicheren Atomics verändert werden.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
export function createBinaryArrayView(bufferLength) {const sharedBuffer = new SharedArrayBuffer(bufferLength * Int32Array.BYTES_PER_ELEMENT);const typedView = new Int32Array(sharedBuffer);return {mutateIndex(index, value) {Atomics.store(typedView, index, value);return typedView;},readIndex(index) {return Atomics.load(typedView, index);}};}
svelte
Erklärung
1
const sharedBuffer = new SharedArrayBuffer(bufferLength * Int32Array.BYTES_PER_ELEMENT);
Reserviert einen binären Speicherpuffer für nebenläufigen gemeinsamen Array-Datenzugriff.
2
const typedView = new Int32Array(sharedBuffer);
Ummantelt den Puffer mit einem TypedArray-Int32-View für indizierte Elementoperationen.
3
Atomics.store(typedView, index, value);
Führt einen threadsicheren atomaren Schreibvorgang auf den Array-Index aus.
4
return Atomics.load(typedView, index);
Liest den 32-Bit-Ganzzahlwert atomar aus, um unvollständiges Lesen zu vermeiden.