From my experience, performance bottleneck in animation playback is not Eevee’s GPU rendering, but Blender editor processes, such as mesh modifiers. Mainly Armature and custom Geometry Nodes stuff.
One Eevee-specific performance tip though: avoid (or temporarily disable) normal and bump maps, as well as any custom shaders that involve Tangent input. Blender is really slow at computing mesh tangents, so disabling everything tangent related speeds up Armature modifier significantly. Often helped me achieve target FPS during playback. You can also try a workaround for faster normal maps, though with significantly worse quality: Way Faster Normal Map Node (for realtime animation playback with tangent space normals)