Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как JS соединяет значения в шаблонной строке? (https://javascript.ru/forum/misc/78174-kak-js-soedinyaet-znacheniya-v-shablonnojj-stroke.html)

Teamur 05.08.2019 18:48

Как JS соединяет значения в шаблонной строке?
 
let i = 20, s = document.body.style;

s.top = `${i}px`;

// или

s.top = i + 'px'


Во втором случае выполняется математическое сложение с проверкой типов и преобразованиями, верно?

Но что происходит в первом случае?

Предположу, что первый способ эффективнее по производительности, ведь вроде как не выполняем математических операций.

Чему бы вы отдали предпочтение и почему?

SuperZen 05.08.2019 22:45

const obj = (function (size, iterations, tests) {
  console.log('BREAK THE MYTH ;p')
  const array = Array.from({ length: size })
  const iterator = Array.from({ length: iterations })
  const score = iterator.map(iter => tests.map(test => {
    const start = performance.now()
    test(array)
    const end = performance.now()
    return [start, end]
  })).reduce((acc, result) => {
    result.forEach(row => {
      row.forEach((r, i) => {
        acc[i] += r
      })
    })
    return acc
  }, Array(tests.length).fill(0))
  console.log(`size: ${size}, iterations ${iterations}`)
  score.map((s, i) => console.log(`tests[${i}] : ${s}`))
})(
  100000,
  10,
  [
    array => array.map((item, i) => `${i}myth`),
    array => array.map((item, i) => i + 'myth'),
  ],
)


ну получается magic quotes продуктивнее ) в моем браузере...

рони 05.08.2019 23:44

SuperZen,
а если строки 24 и 25 поменять местами?

SuperZen 06.08.2019 00:12

)) то не работает как ожидалось... напиши если есть время..

рони 06.08.2019 00:33

SuperZen,
Google Chrome, Firefox, последние, если менять очерёдность массивов, то массив, созданный первым, быстрее проходит тест, у меня так.

j0hnik 06.08.2019 02:29

tests[0] : 1307
tests[1] : 1413

Teamur 06.08.2019 09:37

Firefox Nightly 70 :
tests[0] : 14060
tests[1] : 14532

Chrome Canary 78 :
tests[0] : 16188
tests[1] : 16988

Проверял на нетбуке.

Если тест, составленный SuperZen, оптимален, то шаблы `` лучше.
Вроде как performance.now() оценивает лучше )

Teamur 06.08.2019 09:50

Тоже проверил, поменял местами строки 24 и 25. Теперь всё наоборот. Что-то тут не так )

SuperZen 06.08.2019 11:23

) хз, вот тут есть какие-то попугаи...

https://stackoverflow.com/questions/...83467#29083467

потом https://jsperf.com/es6-string-litera...-concatenation
там кнопочка есть есть run tests

) и у меня сложение через конкатенацию работает быстрее...

в целом, если операций +-1000 и таск запускается руками иногда, смысла не вижу в этом тесте)

Teamur 06.08.2019 12:21

SuperZen, короче буду использовать то, что всплывёт первым ))
Всем спасибо!


Часовой пояс GMT +3, время: 14:12.