我正在从事的项目(Node.js)意味着对文件系统的大量操作(复制、读取、写入等)。
哪种方法是最快的?
我正在从事的项目(Node.js)意味着对文件系统的大量操作(复制、读取、写入等)。
哪种方法是最快的?
当前回答
我写了一个小工具来测试不同的方法:
https://www.npmjs.com/package/copy-speed-test
运行它
npx copy-speed-test --source someFile.zip --destination someNonExistentFolder
它使用child_process.exec()进行本地复制,使用fs进行复制文件。它使用creatererestream和各种不同的缓冲区大小(您可以通过在命令行上传递它们来更改缓冲区大小)。执行NPX copy-speed-test -h查看更多信息)。
其他回答
通常避免异步文件操作是很好的。以下是一个简短的(即没有错误处理)同步示例:
var fs = require('fs');
fs.writeFileSync(targetFile, fs.readFileSync(sourceFile));
我不能得到creatererestream /createWriteStream方法工作的一些原因,但使用fs-额外的npm模块它马上工作。但我不确定性能上的差异。
保存fs-extra
var fs = require('fs-extra');
fs.copySync(path.resolve(__dirname, './init/xxx.json'), 'xxx.json');
使用Node.js内置的复制函数
它提供了异步和同步版本:
const fs = require('fs');
// File "destination.txt" will be created or overwritten by default.
fs.copyFile('source.txt', 'destination.txt', (err) => {
if (err)
throw err;
console.log('source.txt was copied to destination.txt');
});
fs。copyFileSync(src, dest[, mode])
您可能想要使用async/await,因为节点v10.0.0可以使用内置的fs Promises API。
例子:
const fs = require('fs')
const copyFile = async (src, dest) => {
await fs.promises.copyFile(src, dest)
}
注意:
从节点v11.14.0到v10.17.0, API不再是实验性的。
更多信息:
承诺API
承诺拷贝文件
我写了一个小工具来测试不同的方法:
https://www.npmjs.com/package/copy-speed-test
运行它
npx copy-speed-test --source someFile.zip --destination someNonExistentFolder
它使用child_process.exec()进行本地复制,使用fs进行复制文件。它使用creatererestream和各种不同的缓冲区大小(您可以通过在命令行上传递它们来更改缓冲区大小)。执行NPX copy-speed-test -h查看更多信息)。