
Security News
Create React App Officially Deprecated Amid React 19 Compatibility Issues
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
On certain rarer occasions, you run into the need to be notified when a JavaScript object is going to be garbage collected. This feature is exposed to V8's C++ API, but not to JavaScript.
That's where node-weak
comes in! This module exports V8's Persistent<Object>
functionality to JavaScript. This allows you to create weak references, and
optionally attach a callback function to any arbitrary JS object. The callback
function will be invoked right before the Object is garbage collected (i.e. after
there are no more remaining references to the Object in JS-land).
This module can, for example, be used for debugging; to determine whether or not an Object is being garbage collected as it should. Take a look at the example below for commented walkthrough scenario.
Install with npm
:
$ npm install weak
Here's an example of calling a cleanup()
function on a Object before it gets
garbage collected:
var weak = require('weak')
// we are going to "monitor" this Object and invoke "cleanup"
// before the object is garbage collected
var obj = {
a: true
, foo: 'bar'
}
// Here's where we set up the weak reference
var ref = weak(obj, function () {
// `this` inside the callback is the EventEmitter.
console.log('"obj" has been garbage collected!')
})
// While `obj` is alive, `ref` proxies everything to it, so:
ref.a === obj.a
ref.foo === obj.foo
// Clear out any references to the object, so that it will be GC'd at some point...
obj = null
//
//// Time passes, and the garbage collector is run
//
// `callback()` above is called, and `ref` now acts like an empty object.
typeof ref.foo === 'undefined'
It's important to be careful when using the "callbacks" feature of node-weak
,
otherwise you can end up in a situation where the watched object will never
be garbage collected.
You should not define the callback function in the same scope as the object that is being watched. It's often best to define the callback function at the highest scope possible (top-level being the best). Named functions work really well for this:
var http = require('http')
, weak = require('weak')
http.createServer(function (req, res) {
weak(req, gcReq)
weak(res, gcRes)
res.end('Hello World\n')
}).listen(3000)
function gcReq () {
console.log('GC\'d `req` object')
}
function gcRes () {
console.log('GC\'d `res` object')
}
The main exports is the function that creates the weak reference.
The first argument is the Object that should be monitored.
The Object can be a regular Object, an Array, a Function, a RegExp, or any of
the primitive types or constructor function created with new
.
Optionally, you can set a callback function to be invoked before the object is garbage collected.
get()
returns the actual reference to the Object that this weak reference was
created with. If this is called with a dead reference, undefined
is returned.
Checks to see if ref
is a dead reference. Returns true
if the original Object
has already been GC'd, false
otherwise.
Checks to see if ref
is "near death". This will be true
exactly during the
weak reference callback function, and false
any other time.
Checks to see if obj
is "weak reference" instance. Returns true
if the
passed in object is a "weak reference", false
otherwise.
Adds callback
to the Array of callback functions that will be invoked before the
Object gets garbage collected. The callbacks get executed in the order that they
are added.
Removes callback
from the Array of callback functions that will be invoked before
the Object gets garbage collected.
Empties the Array of callback functions that will be invoked before the Object gets garbage collected.
Returns an Array that ref
iterates through to invoke the GC callbacks. This
utilizes node's EventEmitter#listeners()
function and therefore returns a copy
in node 0.10 and newer.
FAQs
Make weak references to JavaScript Objects.
We found that weak demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.