Over verzamelingen in JavaScript II: WeakSets
In het item Over verzamelingen in JavaScript wordt het datatype Set voor
het werken met verzamelingen in JavaScript besproken. Op deze pagina wordt een bijzonder type Set besproken: de WeakSet.
Een WeakSet is een object. Het bevat een verzameling referenties naar Sets. Die referenties worden weak (='zwak') in de WeakSet opgeslagen. Dat betekent dat referenties naar Sets die niet buiten de WeakSet worden gebruikt, door de Garbage Collector uit de WeakSet worden verwijderd. Zie verderop in dit verhaal onder het kopje Tenslotte.
WeakSet heeft een beperkte set methodes:
new WeakSet()Maakt een nieuw WeakSet object.add(object)Voegt een object toe aaan een WeakSet.delete(object)Verwijdert een object uit een WeakSet.has(object)Retourneerttrueals een object in een WeakSetaanwezig is.
De beperkingen hebben tot gevolg dat WeakSets niet beschikken over:
- De eigenschap
size. - De operator
spread(…). - De methode
clear() - Logische methodes, zoals
union,differenceenintersection. - Iteatieve methodes, zoals:
forEach,keys,valuesenentries.
Dit komt door het ontwerp van de WeakSet. Objecten kunnen verdwijnen in de Garbage Collection. Itereren of aftellen van WeakSets is daardoor niet zinvol.
Toepassing van WeakSets lijkt voornamelijk te liggen in serverside-applicaties (met bijv. node.js) die
websites aansturen. In een website (sec) ben ik het nog niet tegengekomen.
Tenslotte…
Een belangrijk onderdeel van de JavaScript-processor is de Garbage Collector (afgekort: GC, vertaald: "Vuilnisophaler"),
Dit mechanisme zorgt ervoor dat de geheugenruimte die wordt ingenomen door niet (meer) gebruikte variabelen, functions, enz.,
wordt vrijgegeven tijdens de uitvoering van de applicatie. Dit houdt het geheugen 'schoon'. Het beperkt het geheugengebuik,
waardoor de adressering efficiënter verloopt. Dit komt de snelheid van de applicatie ten goede. Het beperkt ook het risico
van data-lekken.
In JavaScript zijn Sets hiervan uitgesloten, maar WeakSets niet!WeakSets zijn, vanwege de automatische Garbage Collector, bij uitstek geschikt voor applicaties die veel geheugen vragen. Maar mijns inziens is dit, door de toenemende geheugencapaciteit en snelheid van computers, een zichzelf achterhalende techniek.
Bronnen:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet
https://www.w3schools.com/js/js_sets_weak.asp
