我希望可以在这里提出有关优化的问题,如果不能让我知道我可以在哪里发布,我将删除该帖子。
如果有关系,我正在使用NodeJS。
因此,我正要优化我的应用程序。我仍在创建它的过程中,但是我想从一开始就考虑长远。话虽如此,我有两个优化问题
1)在我的一个函数中,我有一个数组,我遍历该数组,并创建一些文本,并通过每个循环将其写入/追加到文件中。这意味着如果数组中有5个项目,我将写入文件5次。但是另一方面,我可以创建一个变量,通过每个循环将文本附加到变量中,最后将其写入文件。有问题的文本/数组的长度可能很少,甚至可能是无限的(但要从中学习更多)
2)删除文件或将空字符串写入文件的速度更快(当我写入文件时,我使用appendFile,以便在文件存在时将其追加到文件中,或者在文件不存在时创建文件,因此删除文件或写入文件有效
谢谢!
关于优化的主题,我在元素中使用了一个自定义滚轮,在刷新页面后的短短几秒钟内,出现了默认的滚轮,然后加载了自定义滚轮,自定义滚轮较小大小,以便在切换时闪烁元素的位置。有没有办法在加载滚轮css文件或沿这些行加载之前不加载元素?
答案 0 :(得分:0)
通常,使用pro / cons可以通过以下三种主要方法:
所以这取决于您的范围:速度?健壮性?文件的高速率更改?
考虑之后,要找到最快的基准,可以编写如下基准:
const Benchmark = require('benchmark');
const suite = new Benchmark.Suite;
const { Readable } = require('stream')
const util = require('util');
const fs = require('fs');
const append = util.promisify(fs.appendFile);
const text = new Array(500).fill('a'.repeat(5000))
// add tests
const banch = suite
.add('Append sequentially', {
defer: true,
fn: function (deferred) {
Promise.all(text.map(t => append('append.txt', `${t}\n`)))
.then(() => deferred.resolve())
}
})
.add('Write once', {
defer: true,
fn: function (deferred) {
const out = text.reduce((a, b) => `${a}\n${b}`, '')
fs.writeFile('write.txt', out, () => deferred.resolve())
}
})
.add('Stream', {
defer: true,
fn: function (deferred) {
const readable = new Readable()
const writerStream = fs.createWriteStream('stream.txt')
.on('finish', () => deferred.resolve())
readable.pipe(writerStream);
text.forEach(s => readable.push(`${s}\n`))
readable.push(null)
}
})
.on('cycle', function (event) {
console.log(String(event.target));
})
.on('complete', function () {
console.log('Fastest is ' + this.filter('fastest').map('name'));
})
banch.run({ async: true })
这将输出(在我的电脑上):
依次追加x 8.69 ops / sec±21.07%(采样了45个运行)
写入一次x 52.22 ops / sec±5.27%(63次运行采样)
流x 37.76 ops / sec±2.72%(63次运行采样)
最快就是一次写入
具有节点8