gpt4 book ai didi

javascript - 为什么在 Javascript 中更改缓冲区比附加到字符串慢?

转载 作者:行者123 更新时间:2023-12-04 09:17:15 24 4
gpt4 key购买 nike

console.time('#1');
b = Buffer.alloc(100);

for (var ctr = 0; ctr < b.length; ctr++) {
b[ctr] = 65;
}
console.timeEnd('#1');
时间:0.213ms
console.time('#2');
let result = '';
for (var ctr = 0; ctr < 100; ctr++) {
result += String.fromCharCode(65);
}
console.timeEnd('#2');
时间:0.121ms
我原以为#1——缓冲区变化——会更快。
我真的很惊讶,想知道为什么附加到字符串会更快?
附录:
从测试中删除 Buffer.alloc。
b = Buffer.alloc(100);

console.time('#1');
for (var ctr = 0; ctr < b.length; ctr++) {
b[ctr] = 65;
}
console.timeEnd('#1');
时间:0.136ms
从测试中删除 .length 并设置硬 100。
b = Buffer.alloc(100);

console.time('#1b');
for (var ctr = 0; ctr < 100; ctr++) {
b[ctr] = 65;
}
console.timeEnd('#1b');
时间:0.117ms
console.time('#2');
let result = '';
for (var ctr = 0; ctr < 100; ctr++) {
result += String.fromCharCode(65);
}
console.timeEnd('#2');
时间:0.125ms
似乎调整“Buffer.alloc”(这是预期的)和“.length”都增加了执行时间。有趣的练习。

最佳答案

请记住,node.js 是建立在 Google V8 之上的,它是用 C++ 编码的。缓冲区和字符串都分配内存......但缓冲区是为原始字节构建的。得知缓冲区分配了一个直接的 c/c++ 字节数组,而 javascript 字符串实际上变成了后端的 c++ std::string 对象,这并不让我感到惊讶。分配的内存中的单个操作在缓冲区上会更快......但是当涉及到字符串/缓冲区的动态大小时,性能优势将倾向于字符串,因为 c++ std::string 可以动态调整内存需求,而数组每次都必须完全分配新内存。
真正有趣的是,如果您先分配缓冲区并先声明字符串……然后就在循环操作上运行时间……

关于javascript - 为什么在 Javascript 中更改缓冲区比附加到字符串慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63165340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com