That’s optimal if you want to find the best path to a destination, but NPCs milling about a town don’t need the best path, they just need to move toward their goal more or less. And most go on a mostly fixed route, so you can just store the ideal path in memory and let the NPC evade up to some distance from that path.
This makes it a lot more friendly to do a multi-threaded implementation since you don’t need to figure out collision avoidance until it’s about to happen, just look a few steps ahead and course correct as needed.
Enemies should use proper pathing, but NPCs don’t need to be anywhere near that sophisticated.
But I have no idea what they’re actually doing under the hood, it’s just concerning that it gets slow when the player moves without interacting with any NPCs.