It does matter a bit, but I bet overall the difference isn't that big. Although, you have to keep in mind that if you are invoking PHP once for the main page and again to get the contact list, that's going to be a drag on performance. Unless you're writing a single page app.

Writing on my phone from a hotel room at a Tokyo Disney so apologies if this is terse.

Performance shouldn't be #1 consideration, maintainability should. And when you consider performance it should be with an eye to optimizing user experience, not system loads, etc.

For example, you said you're doing an Ajax call what are you returning? Ideally it should be a JSON object from an API. This can then be iterated to draw into the DOM.

A common anti-pattern (IMO) is to return prefabbed HTML. This makes your Ajax vastly bigger and slower than they need to be. This is performance that matters.

What I said about maintenance is relevant now. If you want to pre-populate the items in PHP as well as get them from an Ajax call you end up with two different languages and execution paths getting the same stuff. Smart use of routes, aliases, etc, in a framework can help here. I've done this in Laravel while moving an app from standard layouts to an EmberJS app. But all in all, it's best avoided as a needless functionality duplication.

TL;DR - Make an API. Call the API from Ajax. Call with reasonable defaults to prepopulate.

I've heard of it but have not looked into what it does. It sounds like it does what I was doing with jquery and an ajax post. I just refactored to foreach on the serverside and the page feels snappier.

Making another trip back for the data seems silly when we were just there. It would be like going to the store for milk and your wife calls and says to get bread and you say OK but I'm going to come home first, give you the milk, then go back to the store, get the bread and then go back home and give you the bread.