Overview
Helios is designed for production-grade video rendering. This guide covers performance optimization strategies for both preview and render workflows.Rendering performance
Choose the right rendering path
Helios supports two rendering modes: Canvas mode (faster)- Direct WebCodecs encoding
- GPU-accelerated
- Best for: Three.js, Pixi.js, Canvas API
- Screenshots HTML/CSS/SVG
- Works with any web content
- Best for: Text, layouts, complex CSS
Enable hardware acceleration
GPU acceleration is enabled by default, but you can verify:- H.264 - Most common, best compatibility
- VP8/VP9 - WebM format
- AV1 - Newer, better compression (slower)
Bitrate and quality
Higher bitrate = better quality but larger files:Codec selection
H.264 provides the best speed/quality balance:ultrafast- Quick tests (low quality)medium- Production (balanced)slow- Final export (best quality)
Frame rate optimization
Lower frame rates render faster:- 24 fps - Cinematic look
- 30 fps - Standard web video
- 60 fps - Smooth motion, gaming
Resolution optimization
Render at target resolution, not higher:Preview performance
Disable autoplay animations
Helios controls timing, so disable auto-playing animations:autoSyncAnimations: true to automatically pause animations:
Use requestAnimationFrame efficiently
Helios usesRafTicker by default, which is optimized for browser rendering:
TimeoutTicker:
Debounce expensive operations
Avoid recalculating on every frame if not needed:Optimize asset loading
Preload assets before starting playback:waitUntilStable() method waits for:
- Fonts (
document.fonts.ready) - Images (
img.decode()) - Audio/video metadata
Shadow DOM performance
DomDriver automatically discovers shadow roots, but deep nesting impacts performance:
Memory optimization
Dispose resources
Always clean up when done:Reuse objects
Avoid creating new objects every frame:Limit subscriber count
Each subscriber adds overhead:Distributed rendering
For large projects, use distributed rendering:Chunk size optimization
More chunks = more parallelism, but more overhead:Profiling and debugging
Measure render time
Monitor frame budget
Each frame has a time budget. For 30fps, that’s 33.3ms per frame:Diagnose bottlenecks
Use Chrome DevTools to profile:- Open
chrome://inspect - Click “inspect” on your composition
- Use Performance tab to record
Check diagnostics
Benchmarking examples
Typical render speeds on modern hardware (M1 MacBook Pro):
Real-time factor:
1x= Renders as fast as playback (10s video in 10s)2x= Renders twice as fast (10s video in 5s)0.5x= Renders half speed (10s video in 20s)
Performance checklist
Rendering:- ✅ Use canvas mode for canvas-heavy compositions
- ✅ Enable GPU acceleration
- ✅ Choose appropriate bitrate (2-5 Mbps for 1080p)
- ✅ Use H.264 codec for best compatibility
- ✅ Render at target resolution (don’t downscale)
- ✅ Use distributed rendering for videos > 30s
- ✅ Set
autoSyncAnimations: true - ✅ Preload assets with
waitUntilStable() - ✅ Use single subscriber when possible
- ✅ Avoid per-frame allocations
- ✅ Reuse Three.js geometries and materials
- ✅ Call
helios.dispose()when done - ✅ Dispose Three.js resources
- ✅ Reuse objects instead of creating new ones
- ✅ Clear intervals and event listeners
Next steps
- Learn about custom drivers for specialized workflows
- Optimize canvas and WebGL rendering
- Debug performance with diagnostics