История изменений
Исправление ChALkeR, (текущая версия) :
+ ко всему, кроме стрингбилдера
Стрингбилдер нужен в некоторых случаях.
Для того, чтобы не прострелить себе ногу из-за особенностей хранения строк в виде цепочки, и на жс выглядит как const x = []; x.push(chunk); return x.join('')
.
Сравни:
function makeString1(size) {
let x = ''
for (let i = 0; i < size; i++)
x += String.fromCharCode(Math.floor(Math.random() * 256))
return x
}
function makeString2(size) {
let x = []
for (let i = 0; i < size; i++)
x.push(String.fromCharCode(Math.floor(Math.random() * 256)))
return x.join('')
}
const size = 3e7
console.time()
const y = makeString1(size)
//const y = makeString2(size)
console.timeEnd()
console.log(process.memoryUsage().rss / 2**20)
memoryUsage там пальцем в небо, потому что надо пиковый мерять, конечно. Лучше с --trace-gc
запустить и увидишь, что будет.
А ещё можешь size
покрутить.
Исправление ChALkeR, :
+ ко всему, кроме стрингбилдера
Стрингбилдер нужен в некоторых случаях.
Для того, чтобы не прострелить себе ногу из-за особенностей хранения строк в виде цепочки, и на жс выглядит как const x = []; x.push(chunk); return x.join('')
.
Сравни:
function makeString1(size) {
let x = ''
for (let i = 0; i < size; i++)
x += String.fromCharCode(Math.floor(Math.random() * 256))
return x
}
function makeString2(size) {
let x = []
for (let i = 0; i < size; i++)
x.push(String.fromCharCode(Math.floor(Math.random() * 256)))
return x.join('')
}
const size = 3e7
console.time()
const y = makeString2(size)
//const y = makeString2(size)
console.timeEnd()
console.log(process.memoryUsage().rss / 2**20)
memoryUsage там пальцем в небо, потому что надо пиковый мерять, конечно. Лучше с --trace-gc
запустить и увидишь, что будет.
А ещё можешь size
покрутить.
Исправление ChALkeR, :
+ ко всему, кроме стрингбилдера
Стрингбилдер нужен в некоторых случаях.
Для того, чтобы не прострелить себе ногу из-за особенностей хранения строк в виде цепочки, и на жс выглядит как const x = []; x.push(chunk); return x.join('')
.
Сравни:
function makeString1(size) {
let x = ''
for (let i = 0; i < size; i++)
x += String.fromCharCode(Math.floor(Math.random() * 256))
return x
}
function makeString2(size) {
let x = []
for (let i = 0; i < size; i++)
x.push(String.fromCharCode(Math.floor(Math.random() * 256)))
return x.join('')
}
const size = 3e7
console.time()
const y = makeString2(size)
//const y = makeString2(size)
console.timeEnd()
console.log(process.memoryUsage().rss / 2**20)
memoryUsage там пальцем в небо, потому что надо пиковый мерять, конечно. Лучше с --trace-gc
запустить и увидишь, что будет.
Исправление ChALkeR, :
+ ко всему, кроме стрингбилдера
Стрингбилдер нужен в некоторых случаях.
Для того, чтобы не прострелить себе ногу из-за особенностей хранения строк в виде цепочки, и на жс выглядит как const x = []; x.push(chunk); return x.join('')
.
Сравни:
function makeString1(size) {
let x = ''
for (let i = 0; i < size; i++)
x += String.fromCharCode(Math.floor(Math.random() * 256))
return x
}
function makeString2(size) {
let x = []
for (let i = 0; i < size; i++)
x.push(String.fromCharCode(Math.floor(Math.random() * 256)))
return x.join('')
}
const size = 3e7
console.time()
const y = makeString2(size)
//const y = makeString2(size)
console.timeEnd()
console.log(process.memoryUsage().rss / 2**20)
memoryUsage там пальцем в небо, потому что надо пиковый мерять, конечно. Лучше с --trace-gc
запустить и увидишь, что будет.
Исправление ChALkeR, :
+ ко всему, кроме стрингбилдера
Стрингбилдер нужен в некоторых случаях.
Для того, чтобы не прострелить себе ногу из-за особенностей хранения строк в виде цепочки, и в реализации жс выглядит как const x = []; x.push(chunk); return x.join('')
.
Сравни:
function makeString1(size) {
let x = ''
for (let i = 0; i < size; i++)
x += String.fromCharCode(Math.floor(Math.random() * 256))
return x
}
function makeString2(size) {
let x = []
for (let i = 0; i < size; i++)
x.push(String.fromCharCode(Math.floor(Math.random() * 256)))
return x.join('')
}
const size = 3e7
console.time()
const y = makeString2(size)
//const y = makeString2(size)
console.timeEnd()
console.log(process.memoryUsage().rss / 2**20)
memoryUsage там пальцем в небо, потому что надо пиковый мерять, конечно. Лучше с --trace-gc
запустить и увидишь, что будет.
Исходная версия ChALkeR, :
+ ко всему, кроме стрингбилдера
Стрингбилдер нужен, для того, чтобы не прострелить себе ногу из-за особенностей хранения строк в виде цепочки, и в реализации жс выглядит как const x = []; x.push(chunk); return x.join('')
.
Сравни:
function makeString1(size) {
let x = ''
for (let i = 0; i < size; i++)
x += String.fromCharCode(Math.floor(Math.random() * 256))
return x
}
function makeString2(size) {
let x = []
for (let i = 0; i < size; i++)
x.push(String.fromCharCode(Math.floor(Math.random() * 256)))
return x.join('')
}
const size = 3e7
console.time()
const y = makeString2(size)
//const y = makeString2(size)
console.timeEnd()
console.log(process.memoryUsage().rss / 2**20)
memoryUsage там пальцем в небо, потому что надо пиковый мерять, конечно. Лучше с --trace-gc
запустить и увидишь, что будет.