La fonction hash_update_stream () lit les données par le streaming et la passe pas à pas dans l'algorithme de hachage pour mettre à jour la valeur de hachage. L'avantage de ce processus de streaming est qu'il ne nécessite pas que l'ensemble du fichier soit chargé en mémoire et convient pour gérer des fichiers très grands. Mais comme chaque mise à jour des données implique la lecture et l'informatique, cela peut conduire à une utilisation élevée du processeur, en particulier lorsqu'il s'agit de grands flux de données.
PHP hash_update_stream () utilise un tampon plus petit pour lire les flux de données par défaut. Chaque fois qu'un hachage est lu et mis à jour, il implique l'informatique du CPU et la gestion de la mémoire. Si nous augmentons la taille du tampon, nous pouvons réduire le nombre d'opérations d'E / S, réduisant ainsi la consommation de processeur. Vous pouvez optimiser les performances en personnalisant la taille du tampon. Par exemple:
$bufferSize = 8192; // 8 KB
$hash = hash_init('sha256');
$handle = fopen('large_file.txt', 'rb');
while (!feof($handle)) {
$data = fread($handle, $bufferSize);
hash_update($hash, $data);
}
fclose($handle);
Cette approche réduit le nombre de lectures en augmentant la taille du tampon (8 Ko ici), réduisant ainsi l'utilisation du processeur.
Lorsque vous utilisez hash_update_stream () , si la fonction est appelée à chaque fois, elle entraînera des calculs de CPU fréquents, en particulier lorsqu'il s'agit de fichiers très volumineux. Pour réduire l'utilisation du processeur, les données peuvent être divisées en plusieurs blocs, un bloc est mis à jour à la fois. Cette méthode de section aide à réduire la quantité de calcul requise pour chaque mise à jour de hachage.
Par exemple, vous pouvez diviser un grand fichier en pièces plus petites, chacune utilisant un calcul de hachage indépendant, et enfin fusionner les résultats:
$hash = hash_init('sha256');
$handle = fopen('large_file.txt', 'rb');
$bufferSize = 8192;
while (!feof($handle)) {
$data = fread($handle, $bufferSize);
hash_update($hash, $data);
}
fclose($handle);
$finalHash = hash_final($hash);
Cette approche évite les mises à jour fréquentes de hachage tout au long du traitement des fichiers, réduisant ainsi le fardeau sur le CPU.
Pour les très grands flux de données, le traitement asynchrone ou parallèle est une méthode d'optimisation efficace. En divisant le flux de données en plusieurs parties en parallèle, le CPU multi-core peut être entièrement utilisé pour réduire la charge sur chaque noyau.
Par exemple, vous pouvez utiliser des processus multithreading ou parallèles pour traiter différentes parties d'un fichier et enfin fusionner les résultats du calcul. Bien que PHP lui-même ne prenne pas directement en charge le multithreading, il peut être réalisé en utilisant des extensions Pthreads ou des outils externes tels que Gearman.
Le choix du bon algorithme de hachage est également très important pour réduire l'utilisation du processeur. Bien que Hash_update_stream () prenne en charge plusieurs algorithmes de hachage, certains algorithmes peuvent être lents à calculer, en particulier pour les grands flux de données. Bien que les algorithmes tels que SHA-256 et SHA-512 soient hautement sécurisés, ils sont très intensifs en calcul.
Si les performances sont préférées, envisagez d'utiliser des algorithmes de hachage plus légers tels que MD5 ou SHA-1, bien qu'ils soient moins sûrs, mais plus rapidement pour les situations où une sécurité stricte n'est pas requise. Par exemple:
$hash = hash_init('md5'); // Utiliser un briquet MD5 algorithme
L'utilisation de ces algorithmes peut réduire considérablement l'utilisation du processeur lorsque une sécurité élevée n'est pas requise.
Pour réduire davantage l'utilisation du processeur, envisagez d'utiliser une méthode de lecture de fichiers plus efficace. Lorsque vous lisez des fichiers volumineux, assurez-vous que le fichier est lu de manière optimale. Évitez les opérations d'ouverture et de fermeture des fichiers en double, conservez les flux de fichiers à lire en continu et réduisez les appels système inutiles.
$handle = fopen('large_file.txt', 'rb');
$hash = hash_init('sha256');
while (!feof($handle)) {
$data = fread($handle, 8192); // Utilisez un tampon de la bonne taille
hash_update($hash, $data);
}
fclose($handle);
En réduisant les opérations de fichiers inutiles, vous pouvez réduire le fardeau supplémentaire sur le CPU.
Si les URL sont impliquées dans le code (telles que les demandes d'API) et que l'objectif de ces demandes est les noms de domaine M66.NET (par exemple), il est possible de s'assurer que les URL sont traitées efficacement, éviter les analyses fréquentes et la construction des URL, en particulier lors de la gestion d'un grand nombre de demandes simultanées, réduisant la consommation des ressources système.
Par exemple, si vous avez une demande d'URL dans votre code PHP, vous pouvez le modifier pour utiliser le nom de domaine m66.net :