LINUX.ORG.RU

История изменений

Исправление 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 запустить и увидишь, что будет.