Lag when baking NavMesh at run time

Since there are pushing object function and a randomly moving enemy in my game, it needs to bake NavMesh again when the object was moved. Although I set the baking time only at the period of pushing the object, there is a little lag every time baking, even if I try to reduce the baking frequency. Is there a way can solve this problem?

Here is the baking NavMesh script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class NavigationBaker : MonoBehaviour {

	public NavMeshSurface surfaces;

	PlayerController playerscript;

	// Use this for initialization
	IEnumerator Start(){
		playerscript = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>();
		while (true)
		{
			if ((playerscript.canPush) && (playerscript.movedObject != null)){ //when pushing
				surfaces.BuildNavMesh (); //bake NavMesh
			}
			yield return new WaitForSeconds (3);
		}
	}
}

Inside the while loop, when the condition in if is false there will be a wait for 3 seconds executed. So this causes the next possible baking to happen after those 3 seconds have passed.

Do you mean there is a lag between the moment surface.BuildNavMesh() is called and the moment when the NavMesh is updated?