Engineering Log
Mar 12, 2026

JavaScript Animation Performance Tips

Author

Craffcodes

Learn best practices for smooth animations using JavaScript and GSAP.

JavaScript Animation Performance Tips

Introduction to Animation Performance

Smooth animations are critical for modern user interfaces. Poorly optimized animations can lead to jank, dropped frames, and a degraded user experience. To achieve consistent 60fps animations, it's important to understand how browsers render frames and how JavaScript interacts with the rendering pipeline.

How Browsers Render Animations

Modern browsers follow a rendering pipeline that includes style calculation, layout, paint, and compositing. Animations that trigger layout or paint operations are significantly more expensive than those handled by the GPU.

Use GPU-Accelerated Properties

Always animate properties like transform and opacity, as they can be handled by the GPU without triggering layout or paint.


      .box {
  transform: translateX(100px);
  opacity: 0.8;
}
    

Avoid animating properties like width, height, top, or left, as they cause layout recalculations and reduce performance.

Use requestAnimationFrame for Custom Animations

When creating custom animations, always use requestAnimationFrame instead of setTimeout or setInterval. This ensures animations are synchronized with the browser's refresh rate.


      function animate() {
  // update animation state
  requestAnimationFrame(animate);
}
animate();
    

Leverage GSAP for Optimized Animations

GSAP is optimized for performance and handles many low-level optimizations internally. It batches updates, avoids layout thrashing, and ensures smooth animations even under heavy load.


      gsap.to('.box', {
  x: 200,
  duration: 1,
  ease: 'power2.out'
});
    

Avoid Layout Thrashing

Layout thrashing occurs when JavaScript repeatedly reads and writes layout properties, forcing the browser to recalculate layout multiple times.


      // Bad
const width = element.offsetWidth;
element.style.width = width + 10 + 'px';
    

Batch DOM reads and writes to avoid unnecessary recalculations.

Minimize JavaScript Execution Time

Heavy JavaScript execution can block the main thread and cause dropped frames. Break long tasks into smaller chunks and defer non-critical work using requestIdleCallback.


      requestIdleCallback(() => {
  // non-critical work
});
    

Use will-change Sparingly

The will-change property can hint the browser to optimize certain elements for animation, but overusing it can increase memory usage.


      .box {
  will-change: transform;
}
    

Optimize for Mobile Devices

Mobile devices have limited CPU and GPU power. Reduce the number of simultaneous animations and avoid heavy effects like blur or large shadows.

Conclusion

Optimizing JavaScript animations requires understanding browser rendering, choosing the right properties, and minimizing main thread work. By using GPU-friendly properties, leveraging GSAP, and following best practices, you can deliver smooth, high-performance animations across all devices.

arrow_back Back to Blog
Related Blogs