If calculation the path is the actual issue try updating it not every frame.
Variant a.:
Have the player position saved and calculate the distance to that saved location. If it is above a certain threshold where it would make sense to update the enemy path emit a signal that enemies catch.
Variant b.:
Save navagent.getnext_location() after calculating a new path and update only when they reach it. The player can probably only move so far in this time that the next location might still be a somewhat valid movement.
Variant c.:
Use a timer. Calculate the path only every 0.5 seconds. For very intelligent enemies, decrease that time.
Pathfinding only makes sense when there are actual obstacles and walls. When you're in mostly free space, don't use it.