La fonction mysqli_free_result() libère la mémoire associée à un résultat. Vous devriez toujours libérer les résultats avec mysqli_free_result(), lorsque votre objet de résultat ne vous est plus utile.

La fonction mysqli_close() ferme la connexion au serveur MySQL et libère les ressources utilisées.

Lorsqu'un script se termine, la connexion à la base et les jeux de résultats ouverts (objets de type mysqli_result) sont automatiquement détruits par PHP.
Donc, la fermeture de la connexion et la libération des résultats sont optionnelles.
Néanmoins, il est recommandé de le faire explicitement car ça permet de retourner les ressources immédiatement à PHP et à MySQL, et donc d'améliorer les performances; notamment quand le script PHP a des traitements relativement lourds à faire après avoir récupéré des enregistrements en base de données.