Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.08.2019, 18:48
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

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

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

// или

s.top = i + 'px'


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

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

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

Чему бы вы отдали предпочтение и почему?
Ответить с цитированием
  #2 (permalink)  
Старый 05.08.2019, 22:45
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

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 продуктивнее ) в моем браузере...
Ответить с цитированием
  #3 (permalink)  
Старый 05.08.2019, 23:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,136

SuperZen,
а если строки 24 и 25 поменять местами?
Ответить с цитированием
  #4 (permalink)  
Старый 06.08.2019, 00:12
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

)) то не работает как ожидалось... напиши если есть время..
Ответить с цитированием
  #5 (permalink)  
Старый 06.08.2019, 00:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,136

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

Последний раз редактировалось рони, 06.08.2019 в 11:16.
Ответить с цитированием
  #6 (permalink)  
Старый 06.08.2019, 02:29
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

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

Последний раз редактировалось j0hnik, 06.08.2019 в 03:11.
Ответить с цитированием
  #7 (permalink)  
Старый 06.08.2019, 09:37
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

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:45.
Ответить с цитированием
  #8 (permalink)  
Старый 06.08.2019, 09:50
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Тоже проверил, поменял местами строки 24 и 25. Теперь всё наоборот. Что-то тут не так )
Ответить с цитированием
  #9 (permalink)  
Старый 06.08.2019, 11:23
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

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

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

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

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

в целом, если операций +-1000 и таск запускается руками иногда, смысла не вижу в этом тесте)
Ответить с цитированием
  #10 (permalink)  
Старый 06.08.2019, 12:21
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать значения переменной из одного фрейма в другой в Google Chrome Freestyle007 Events/DOM/Window 17 20.06.2019 14:28
Как запомнить число или значение в js (координаты курсора)? Новичок. Teno Элементы интерфейса 5 16.04.2019 07:19
Как передать два значения внутрь promise js mystica Общие вопросы Javascript 2 18.11.2018 15:25
Как подгрузить код JS динамически? zhurchik Общие вопросы Javascript 22 02.02.2015 14:16
есть ли в js понятие частоты кадров, наподобие как во флэше? andrew_F Общие вопросы Javascript 8 01.05.2012 20:25