퇴사한 지 2달이 넘었습니다. 이전에도 많은 툴을 작성했는데, 퇴사하는 날 지난 1년 동안 쌓아둔 툴과 코드를 모두 직접 포맷했습니다. 오늘은 이전 프로젝트에서 겪었던 문제가 생각나서 오늘 녹화해봤습니다.
메모리 최적화를 하다가 로딩 시 로딩이 어려운 사진을 발견했는데, 50x50 크기의 작은 스킬 아이콘을 발견했는데, 사진 크기가 수 미터로 너무 커서 찾아냈습니다. 아이콘을 아트로 출력할 때 압축하는 걸 깜빡해서 아이콘이 너무 커져서 로딩이 멈추지 않더군요.
프로젝트에는 수천 개의 아트 파일이 있는데, 문제를 하나씩 찾아내는 것은 정말 물리적인 작업입니다. 저는 여가 시간을 활용하여 nodejs 파일 시스템의 API를 사용해 보고 이를 충족하기 위해 작은 데모를 작성했습니다. , 신속하게 문제를 발견하고 아티스트에게 문제가 있는 그림을 수정하라고 지시했습니다. 이 방법으로 문제를 해결하세요.
이 파일의 크기를 계산하는 것은 매우 실용적입니다. 프런트 엔드에서는 이러한 사진을 계산하고 더 큰 사진을 원하는 방식으로 압축할 수 있습니다. 데이터를 참조로 삼으면 문제를 쉽게 찾을 수 있기 때문입니다.
다음은 nodejs를 사용하여 폴더 파일 내용을 순회하고, 모든 파일을 읽고, 큰 것부터 작은 것 순으로 출력하고, 최종적으로 정렬된 파일을 생성합니다. 해당 파일에 파일이 있는지 확인할 수 있습니다.
var fs = require('fs') //遍历文件夹,获取所有文件夹里面的文件信息 /* * @param path 路径 * */ function geFileList(path) { var filesList = []; readFile(path,filesList); return filesList; } //遍历读取文件 function readFile(path,filesList) { files = fs.readdirSync(path);//需要用到同步读取 files.forEach(walk); function walk(file) { states = fs.statSync(path+'/'+file); if(states.isDirectory()) { readFile(path+'/'+file,filesList); } else { //创建一个对象保存信息 var obj = new Object(); obj.size = states.size;//文件大小,以字节为单位 obj.name = file;//文件名 obj.path = path+'/'+file; //文件绝对路径 filesList.push(obj); } } } //写入文件utf-8格式 function writeFile(fileName,data) { fs.writeFile(fileName,data,'utf-8',complete); function complete() { console.log("文件生成成功"); } } var filesList = geFileList("G:/nodejs"); filesList.sort(sortHandler); function sortHandler(a,b) { if(a.size > b.size) return -1; else if(a.size < b.size) return 1 return 0; } var str=''; for(var i=0;i<filesList.length;i++) { var item = filesList[i]; var desc ="文件名:"+item.name + " " +"大小:"+(item.size/1024).toFixed(2) +"/kb"+" " +"路径:"+item.path; str+=desc +"\n" } writeFile("test.txt",str);
사용법은 매우 간단합니다. var filesList = geFileList(“G:/nodejs”); getFileList의 매개변수를 원하는 경로로 변경하고 내부의 매개변수 경로를 변경합니다. 즉, 폴더의 파일을 탐색하여 생성할 수 있습니다. 파일.
파일이 많을 경우 읽기 쉽도록 보다 강력한 텍스트 편집기를 사용하는 것이 좋습니다.
파일 크기는 다음과 같습니다