Avevo provato a mettere la funzione esterna e la pagina faceva molta più fatica. Poi ho riprovato a portarla fuori ed oltre a fare meno fatica mi legge anche l'echo. Mistero...
Comunque ho capito cos'è che non andava, era l'update finale che lo faceva su tutti perchè mancara il where id. Praticamente generava 800 password per poi memorizzarle tutte insieme, ecco perchè era così lento.