Почему array.map (String.fromCharCode) такой медленный ?

Это началось, когда я прочитал эссе Гвидо ван Россума An Optimization Anecdote .

Решив попробовать то же самое в JavaScript, я рассчитал следующее:

numbers.map(function(x){ return String.fromCharCode(x); });

Это уже было довольно быстро, но почему бы не полностью исключить анонимную функцию и передать String.fromCharCode непосредственно в map ():

numbers.map(String.fromCharCode);

Я рассчитал время и ... ... это было примерно в 100 раз медленнее , чем в предыдущей версии. Почему?

Почему-то передача этой нативной функции напрямую в Array.map () происходит медленнее, чем перенос ее внутри другой функции и передача в Array.map ().

  • Это не зависит от браузера: проверено в Chrome, Firefox и Opera.

  • Это не относится к map (): пробовал forEach (), который вел себя аналогичным образом.

  • Это не относится к встроенным функциям: пробовал Math.round () и Math.sin () - с этими результаты были такими, как и следовало ожидать: прямая передача функции в Array.map () была немного быстрее, чем использование промежуточной анонимной функции.

Кажется, проблема в String. fromCharCode в частности.

Что здесь происходит?

PS. Первоначально этот вопрос был задан в ветке Hacker News , но, поскольку соответствующая статья посвящена Python, я подумал, что после публикации здесь она получит больше внимания для разработчиков JavaScript. Извините за перекрестную публикацию.

6
задан Rene Saarsoo 2 November 2010 в 13:57
поделиться