Quelle est la vitesse de fs.readdirSync ? Puis-je l'accélérer ?
P粉064448449
2023-09-04 19:48:56
<p>J'ai une fonction qui récupère de manière récursive tous les fichiers d'un répertoire en utilisant fs.readdirSync.
Cela a bien fonctionné avec le petit répertoire. Je l'ai exécuté à titre de test, mais maintenant je l'exécute sur un répertoire de plus de 100 Go et cela prend beaucoup de temps. Avez-vous des idées sur la façon d'accélérer cela ou s'il existe un meilleur moyen ? Je devrai éventuellement l'exécuter sur certains répertoires contenant des téraoctets de données. </p>
<pre class="brush:php;toolbar:false;">// Fonction récursive pour obtenir des fichiers
fonction getFiles (rép, fichiers = []) {
// Récupère un tableau de tous les fichiers et répertoires du répertoire transmis en utilisant fs.readdirSync
const fileList = fs.readdirSync(dir);
// Crée le chemin complet du fichier/répertoire en concaténant le répertoire passé et le nom du fichier/répertoire
pour (fichier const de fileList) {
const nom = `${dir}/${file}` ;
// Vérifiez si le fichier/répertoire actuel est un répertoire utilisant fs.statSync
if (fs.statSync(name).isDirectory()) {
// S'il s'agit d'un répertoire, appelle récursivement la fonction getFiles avec le chemin du répertoire et le tableau files
getFiles(nom, fichiers);
} autre {
// S'il s'agit d'un fichier, poussez le chemin complet vers le tableau files
fichiers.push(nom);
}
}
renvoyer des fichiers ;
}</pre></p>
Malheureusement, l'option
异步
速度较慢。所以我们需要优化你的代码。您可以使用{withFileTypes:true}
pour ce faire est 2x plus rapide.J'ai aussi essayé
{recursive:true}
选项,但它甚至比您的解决方案还要慢。它不适用于withFileTypes
avec le nœud v20.Peut-être qu'un meilleur SSD avec une vitesse de lecture élevée serait utile. Bien que je suppose que les entrées de fichier sont lues à partir de l'index du système de fichiers, je ne sais pas comment le matériel affecte cela.
Sortie :