@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/poolingQuick 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
| Method | Description |
|---|---|
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 releasesComponent 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)]);