javascript / expert
Snippet
Zirkuläres Puffer-Pipeline-Management durch In-Place Array-Mutationen in Svelte-Abonnements
Implementiert einen Ringpuffer fester Kapazität mittels Indexarithmetik über prä-allokierten Array-Speicher. Es gibt sortierte Snapshot-Arrays an Svelte-Abonnenten aus und verhindert Garbage-Collection-Overhead.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import { writable } from 'svelte/store';export function createCircularBufferStore(capacity) {const buffer = new Array(capacity).fill(null);let head = 0;let count = 0;const store = writable([]);return {subscribe: store.subscribe,push(item) {buffer[head] = item;head = (head + 1) % capacity;if (count < capacity) count++;const ordered = new Array(count);for (let i = 0; i < count; i++) {ordered[i] = buffer[(head - count + i + capacity) % capacity];}store.set(ordered);}};}
svelte
Erklärung
1
const buffer = new Array(capacity).fill(null);
Allokiert vorab ein zusammenhängendes Array fester Größe zur Vermeidung von Heap-Reallokationen.
2
head = (head + 1) % capacity;
Berechnet den Schreib-Offset innerhalb der Array-Grenzen mittels Modulo-Arithmetik.
3
ordered[i] = buffer[(head - count + i + capacity) % capacity];
Rekonstruiert die chronologische Elementreihenfolge basierend auf dem aktuellen Schreibzeiger.