Как JS соединяет значения в шаблонной строке?
let i = 20, s = document.body.style;
s.top = `${i}px`;
// или
s.top = i + 'px'
Во втором случае выполняется математическое сложение с проверкой типов и преобразованиями, верно? Но что происходит в первом случае? Предположу, что первый способ эффективнее по производительности, ведь вроде как не выполняем математических операций. Чему бы вы отдали предпочтение и почему? |
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 продуктивнее ) в моем браузере... |
SuperZen,
а если строки 24 и 25 поменять местами? |
)) то не работает как ожидалось... напиши если есть время..
|
SuperZen,
Google Chrome, Firefox, последние, если менять очерёдность массивов, то массив, созданный первым, быстрее проходит тест, у меня так. |
tests[0] : 1307
tests[1] : 1413 |
Firefox Nightly 70 :
tests[0] : 14060 tests[1] : 14532 Chrome Canary 78 : tests[0] : 16188 tests[1] : 16988 Проверял на нетбуке. Если тест, составленный SuperZen, оптимален, то шаблы `` лучше. Вроде как performance.now() оценивает лучше ) |
Тоже проверил, поменял местами строки 24 и 25. Теперь всё наоборот. Что-то тут не так )
|
) хз, вот тут есть какие-то попугаи...
https://stackoverflow.com/questions/...83467#29083467 потом https://jsperf.com/es6-string-litera...-concatenation там кнопочка есть есть run tests ) и у меня сложение через конкатенацию работает быстрее... в целом, если операций +-1000 и таск запускается руками иногда, смысла не вижу в этом тесте) |
SuperZen, короче буду использовать то, что всплывёт первым ))
Всем спасибо! |
| Часовой пояс GMT +3, время: 16:18. |