setTimeout -> requestAnimationFrame

You get way better performance with requestAnimationFrame