Hola:
Yo uso un código similar en una galería con más de 1000 fotos, y no tengo problemas... quizás la imagen original tenga demasiado peso... Si está en la web debería estar optimizada...
Veo que accedes 2 veces al fichero, no sé si se mejoraría un poco con un solo acceso:
$source = imagecreatefromjpeg($filename);
$width = imagesx($source);
$height = imagesy($source);
Tal vez algún entendido de su opinión.
Saludos