Скорость и стиль Math.max против тернарного оператора в JavaScript

В JavaScript лучше делать это:

var h = th > ch ? th : ch;

или

var h = Math.max(th, ch);

?

Ответ 1

Второе кажется мне более ясным, поскольку оно показывает намерение, а не реализацию.

Я сомневаюсь, что очень много ситуаций, когда любая разница в производительности будет иметь какую-либо заметную разницу, и, вероятно, она зависит от реализации.

Ответ 2

Согласно этому тесту jsperf, оператор if является наиболее эффективным.

http://jsperf.com/math-min-vs-if-condition-vs/2

Однако я согласен с тем, что Math.max/Math.min более читабельна.

Ответ 3

В моно JIT может встроить методы Math.Min и Math.Max ​​и обеспечить лучшую производительность по сравнению с пользовательскими, встроенными, реализациями. Он будет использовать специальные инструкции, если они доступны аппаратными средствами. Итак, однажды, если в JavaScript есть некоторые JIT (Google V8?), Вероятно, это будет некоторое преимущество в производительности для класса Math для пользователей.

Ответ 4

Для скорости нет существенной разницы.

Для стиля Math.max гораздо читабельнее и, следовательно, лучший вариант.

Ответ 5

Вот тест JSPerf, который позволяет протестировать его в вашем браузере (-ах):

http://jsperf.com/math-min-vs-if-condition-vs/13

Мои тесты в нескольких браузерах показывают, что Math.min, тернарный оператор и оператор if выполняются аналогично.

Ответ 6

Math.max() действует точно так же, как вы писали в первую очередь. Он использует тернарный оператор для возврата max. Поэтому, если вы хотите избавиться от некоторых наносекунд, вы можете использовать первый способ, чтобы избежать вызова функции. Тем не менее, IMHO, эта разница не может повлиять на производительность, если у вас нет кучи Math.max.