npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

pooled

v0.0.2

Published

mutate constructors into a poolable form

Downloads

7

Readme

pooled

turn a javascript constructor into a pooled resource that can be attain'd and release'd (to reduce garbage generation by reusing objects; useful in games where you want to avoid GC at all costs).


function Point(x, y, z) {
  this.x = x
  this.y = y
  this.z = z
}

Point.prototype.onrelease = function() {
  console.log('released')
}

Point = pooled(Point)

var p = Point(0, 0, 0)
p.release() // -> "released"
console.log(Point.pooled()) // -> 1
var p2 = Point(12, 12, 12)
console.log(Point.pooled()) // -> 0
console.log(Point.extant()) // -> 1
console.log(p2 === p)       // true 

Point.allocate(100, 12, 21, 1)  // preallocate 100 Point objects
                                // with arguments

API

newcons = pooled(cons[, shouldSeal=true])

Create a pooled constructor from an existing constructor.

By default, new objects will be sealed -- after the constructor is run, no new properties can be added to them.

newcons.attain(arg1, arg2, arg3) -> instance

newcons(arg1, arg2, arg3...) -> instance

Forward the arguments to the original constructor and create a new instance.

newcons.extant() -> number

Get the number of currently held instances of newcons.

newcons.pooled() -> number

Get the number of currently pooled (released) instances of newcons.

newcons.allocate(number[, default, arguments, go, here]) -> number

Allocate number new newcons instances into the pool. Forward the provided arguments to them.

Returns the number of currently pooled objects.

instance.release()

Releases this instance. You should get rid of the reference to it in your code, as some other code might reuse this object at later point.

If there is an onrelease method on the object, it'll get called.

License

MIT