fs.readdirSync 有多快?我可以加快速度嗎?
P粉064448449
2023-09-04 19:48:56
<p>我有一個函數,可以使用 fs.readdirSync 遞歸地取得目錄中的所有檔案。
它與我作為測試運行的小目錄配合得很好,但現在我在一個超過 100GB 的目錄上運行它,需要很長時間才能完成。關於如何加快速度或有更好的方法,有什麼想法嗎?我最終將不得不在一些包含 TB 資料的目錄上運行它。 </p>
<pre class="brush:php;toolbar:false;">// Recursive function to get files
function getFiles(dir, files = []) {
// Get an array of all files and directories in the passed directory using fs.readdirSync
const fileList = fs.readdirSync(dir);
// Create the full path of the file/directory by concatenating the passed directory and file/directory name
for (const file of fileList) {
const name = `${dir}/${file}`;
// Check if the current file/directory is a directory using fs.statSync
if (fs.statSync(name).isDirectory()) {
// If it is a directory, recursively call the getFiles function with the directory path and the files array
getFiles(name, files);
} else {
// If it is a file, push the full path to the files array
files.push(name);
}
}
return 檔案;
}</pre></p>
不幸的是,
非同步
速度較慢。所以我們需要優化你的程式碼。您可以使用{withFileTypes:true}
選項來完成此操作,速度增加 2 倍。我還嘗試過節點 v20 的
{recursive:true}
選項,但它甚至比您的解決方案還要慢。它不適用於withFileTypes
。也許具有高讀取速度的更好 SSD 會有所幫助。雖然我猜文件條目是從檔案系統索引讀取的,但不確定硬體如何影響它。
輸出: