I wouldn’t say there is a possible way of having the lag be entirely avoided, and calling GetChildren() on a model with a ton of parts will lag harder.
Your best bet is Model:Destroy().
Well, you could try to loop through all the parts in the model and then use a small wait between each part that gets destroyed, so that it doesn’t instantly delete all the parts, that should reduce the lag significantly.
Assuming that the model has an overly-excessive amount of parts, meshparts, etc. etc. unfortunately this wouldn’t be as useful since it would then take a lot of time to delete the entire thing. OP clearly intends for the model to be instantly deleted.
Every time there’s a model deletion request a 2 second loading screen for the whole server? That seems very counterintuitive if you ask me. I am removing 2-3 models per minute, so that just is not a viable solution.
This is more than likely mid-game, so it wouldn’t really make any proper sense as to why you’d want a loading screen mid-game unless you were loading something - loading screens aren’t for deleting anything
In other words, there is no better way to combat this.
You can try re-parenting the model to something that isn’t the workspace, as an example, maybe ServerStorage(?) and let the server handle the deletion of the models.
That’s because even when re-parenting to the ServerStorage, the parts are basically still there. When setting the primary part’s CFrame to a substantial amount of distance, I think it’d be one of the best solutions because it doesn’t involve affecting every single part (assuming that they are welded or that SetPrimaryPartCFrame moves the entire thing).