Skip to content

@web-engine-dev/pooling

Object pooling with generic pools, recycling, and statistics tracking.

Features

  • Generic Pools: Pool any object type
  • Auto-Expansion: Grow pools as needed
  • Statistics: Track pool usage
  • Pre-Warming: Initialize pools at startup
  • Custom Factory: Control object creation

Installation

bash
npm install @web-engine-dev/pooling
# or
pnpm add @web-engine-dev/pooling

Quick Start

typescript
import { ObjectPool } from '@web-engine-dev/pooling';

// Create pool
const bulletPool = new ObjectPool<Bullet>({
  create: () => new Bullet(),
  reset: (bullet) => bullet.reset(),
  initialSize: 100,
  maxSize: 500,
});

// Get from pool
const bullet = bulletPool.acquire();
bullet.fire(position, direction);

// Return to pool
bulletPool.release(bullet);

API Overview

Object Pool

typescript
const pool = new ObjectPool<MyObject>({
  // Factory function
  create: () => new MyObject(),

  // Reset when released
  reset: (obj) => obj.reset(),

  // Validate before reuse
  validate: (obj) => obj.isValid(),

  // Destroy when pool shrinks
  destroy: (obj) => obj.dispose(),

  // Pool sizing
  initialSize: 50,
  maxSize: 200,
  growthFactor: 2,
});

Pool Methods

MethodDescription
acquire()Get object from pool
release(obj)Return object to pool
prewarm(n)Create n objects in advance
clear()Destroy all pooled objects
shrink()Remove excess objects
stats()Get usage statistics

Pool Statistics

typescript
const stats = pool.stats();
console.log(stats.available); // Objects in pool
console.log(stats.inUse); // Objects checked out
console.log(stats.total); // Total created
console.log(stats.peak); // Max concurrent use
console.log(stats.acquires); // Total acquires
console.log(stats.releases); // Total releases

Component Pool

typescript
import { ComponentPool } from '@web-engine-dev/pooling';

const particlePool = new ComponentPool({
  components: [Transform, Velocity, Lifetime, Sprite],
  initialSize: 1000,
});

// Acquire entity with components
const entity = particlePool.spawn(world);

// Release entity
particlePool.despawn(entity);

Pre-Warming

typescript
// Warm pools during loading screen
await Promise.all([bulletPool.prewarm(100), particlePool.prewarm(500), enemyPool.prewarm(50)]);

Proprietary software. All rights reserved.