# Three.js Best Practices - FikoYT

## 🎯 Core Rules

- **NgZone dışı:** Render et
- **OnPush:** Change detection
- **Dispose:** Memory cleanup
- **Passive events:** Scroll performansı

## 🚀 Performans

```typescript
// ❌ Yanlış - Her frame render
render() {
  renderer.render(scene, camera);
}

// ✅ Doğru - Gerekirse render
markNeedsRender() {
  this.needsRender = true;
  if (renderMode === 'on-demand') {
    render();
  }
}
```

## 🧹 Memory Management

```typescript
ngOnDestroy() {
  // Temizlik
  geometries.forEach(g => g.dispose());
  materials.forEach(m => m.dispose());
  textures.forEach(t => t.dispose());
  renderer.dispose();
}
```

## 📦 Object Pooling

```typescript
// Mesh pool
class MeshPool {
  private pool: THREE.Mesh[] = [];

  acquire(): THREE.Mesh {
    return this.pool.pop() || new THREE.Mesh();
  }

  release(mesh: THREE.Mesh) {
    mesh.geometry = null;
    mesh.material = null;
    this.pool.push(mesh);
  }
}
```

## ⚠️ Critical Points

- **Vertex colors:** Zorunlu
- **matrixAutoUpdate:** Manuel kontrol
- **Frustum culling:** Aktif et
- **LOD:** Büyük modeller

---
2025-11-06