fs.readdirSync는 얼마나 빠릅니까? 속도를 높일 수 있나요?
P粉064448449
2023-09-04 19:48:56
<p>fs.readdirSync를 사용하여 디렉터리의 모든 파일을 재귀적으로 가져오는 함수가 있습니다.
테스트로 실행한 작은 디렉터리에서는 잘 작동했지만 지금은 100GB가 넘는 디렉터리에서 실행 중이고 완료하는 데 시간이 오래 걸립니다. 속도를 높이는 방법이나 더 좋은 방법이 있는지에 대한 아이디어가 있습니까? 결국에는 테라바이트 규모의 데이터가 포함된 일부 디렉터리에서 이 작업을 실행해야 합니다. </p>
<pre class="brush:php;toolbar:false;">// 파일을 가져오는 재귀 함수
함수 getFiles(dir, 파일 = []) {
// fs.readdirSync를 사용하여 전달된 디렉터리에 있는 모든 파일과 디렉터리의 배열을 가져옵니다.
const fileList = fs.readdirSync(dir);
// 전달된 디렉터리와 파일/디렉터리 이름을 연결하여 파일/디렉터리의 전체 경로를 생성합니다.
for(fileList의 const 파일) {
const 이름 = `${dir}/${file}`;
// fs.statSync를 사용하여 현재 파일/디렉토리가 디렉터리인지 확인합니다.
if (fs.statSync(이름).isDirectory()) {
// 디렉토리인 경우 디렉토리 경로와 파일 배열을 사용하여 getFiles 함수를 재귀적으로 호출합니다.
getFiles(이름, 파일);
} 또 다른 {
// 파일인 경우 파일 배열의 전체 경로를 푸시합니다.
files.push(이름);
}
}
파일 반환;
}</pre></p>
안타깝게도 이 작업을 수행하는
异步
速度较慢。所以我们需要优化你的代码。您可以使用{withFileTypes:true}
옵션은 2배 더 빠릅니다.저도 node v20으로
{recursive:true}
选项,但它甚至比您的解决方案还要慢。它不适用于withFileTypes
를 시도했습니다.읽기 속도가 빠른 더 나은 SSD가 도움이 될 수도 있습니다. 파일 시스템 인덱스에서 파일 항목을 읽는 것으로 추측되지만 하드웨어가 이에 어떤 영향을 미치는지는 잘 모르겠습니다.
으아악출력:
으아악