Когда я выполняю простую функцию JS два раза подряд, стоит ли она вдвое больше вычислительной мощности? - PullRequest
0 голосов
/ 09 февраля 2019

Упрощенный пример:

function shorten(string) {
  return string.slice(0, 3);
}

const today = "Friday";
if (shorten(today) === "Fri") {
  console.log("Oh yeah it's " + shorten(today));
}

shorten(today) здесь вызывается дважды, что заставляет меня чувствовать себя плохо.Я полагаю, что мы все сталкиваемся с этой ситуацией каждый день, и мы сначала сохраняем значение shorten(today) в переменной, а затем используем эту переменную дважды.

Мой вопрос: достаточно ли умен современные движки JS, так что мне не нужно об этом беспокоиться?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Если вы запускаете shorten несколько раз, движок V8 имеет JIT-компилятор , который оптимизирует этот фрагмент кода, чтобы он работал быстрее в следующий раз.

Когдаво второй раз он выполняет один и тот же вызов функции, может быть, он может понять, что только что выполнил те же вычисления и все еще имеет результат в памяти

То, что вы описали, известно как памятка , а V8 этого не делает.Тем не менее, есть библиотеки (например, fast-memoize), которые это делают.

Но вам лучше всего сохранить результат вычисления в переменной и сослаться на него.

0 голосов
/ 09 февраля 2019

Когда я выполняю простую функцию JS два раза подряд, стоит ли она вдвое больше вычислительной мощности?

Да.Рассмотрим Почему использование цикла для итерации от начала массива до конца быстрее, чем итерации и от начала до конца, и от конца до начала?

- достаточно современные умные движки JS, чтобыМне на самом деле не нужно беспокоиться об этом?

Нет.Ни один движок не может надежно предсказать возвращаемое значение вызова функции JavaScript.См. Было ли математически доказано, что антивирус не может обнаружить все вирусы? Можно ли создать регулярное выражение, определяющее тип возвращаемого значения функции?

...