Checa el tiempo que le toma a tu server el "parsear" el documento, usa microtime() para esto, si ves que se esta tomando mas de un segundo podrias considerar optimizar el proceso.
Puedes hacerlo via:
- Haces el calculo de tus querys y guardas el resultado persistente en otra tabla (por decir cache)
- Reduces la cantidad querys, (hay veces que puedes hacer 1 query para varios procesos uniendo tablas)
El tema de cache es muy optimo, imagina que un query, busca cuantas categorias hay, y que categorias hija tiene, etc. puedes hacerlo 1 vez, lo guardas (serializado como array) en otra tabla de cache y usas este solo para "seleccionar", los datos.
Borras el cache y calculas de nuevo solo cada vez que creas o borras una categoria, etc.
Espero te sirva esto!