Два дня назад, когда я нашел jsperf.com , в котором есть множество тестов производительности JavaScript, я просмотрел несколько тестов.
Один из тестов был это , который сравнивает Math.min(a,b)
против a<b?a:b
. Когда я запустил этот тест в Google Chrome, оказалось, что a<b?a:b
намного быстрее, чем Math.min(a,b)
(в Chrome 14 первый 53,661,381 ops/s
, второй 419,830,711 ops/s
). Другие веб-браузеры имеют похожие результаты.
Однако в Firefox результат противоположен. Math.min(a,b)
намного быстрее, чем a<b?a:b
! Первый - 374,219,869 ops/s
, а второй - 79,490,749 ops/s
в Firefox 6.
Когда я разместил это на Facebook, кто-то сказал, что «Поскольку Firefox - это проект с открытым исходным кодом, разработчики оптимизировали Math.min
, но Google Chrome - нет, поскольку Google Chrome - всего лишь модификация Chromium», но (помимо этого выше утверждение не совсем верно), что не имеет смысла, потому что это не объясняет причину, по которой Google Chrome a<b?a:b
и Firefox Math.min(a,b)
работает с одинаковой скоростью, а Google Chrome Math.min(a,b)
и Firefox a<b?a:b
работают с одинаковой скоростью потому что если Firefox быстрее, чем Google Chrome, то Google Chrome Math.min(a,b)
должен быть намного медленнее, чем Firefox a<b?a:b
.
Резюме:
- В других браузерах
a<b?a:b
быстрее, чем Math.min(a,b)
.
- Однако в Firefox
Math.min(a,b)
быстрее, чем a<b?a:b
.
- Поскольку скорость
Math.min(a,b)
в Firefox ≒ скорость a<b?a:b
в Google Chrome и скорость a<b?a:b
в Firefox ≒ скорость Math.min(a,b)
в Google Chrome, «Firefox медленный» или «Firefox быстро "не может быть причиной.
Есть ли причина, почему (как) это происходит?