Версии встроенных функций Fast.js JavaScript работают быстрее


Чтобы продемонстрировать, насколько вырос весь JavaScript, Fast.js повторно реализует ряд встроенных нативных функций в JavaScript. Угадайте что — они быстрее!

Раньше существовало основное правило, согласно которому встроенные функции в таком языке, как JavaScript, всегда работают намного быстрее, чем эквивалентный код, выраженный на необработанном языке. Причина была довольно очевидной — встроенные функции были закодированы в машинном коде, каким бы он ни был, и вы сравнивали скомпилированный и интерпретированный. Однако со временем, благодаря передовым JIT-компиляторам и методам оптимизации, JavaScript стал быстрее. Настолько быстро, что кажется, что надежное правило больше не применяется, или нет?

Fast.js — это библиотека с открытым исходным кодом, которая предоставляет реализации .foreach, .map, .reduce, concat, bind, apply, filter, indexOf и LastIndexOf. Он также реализует две стандартные служебные функции — частичную и клонированную, которые не встроены — в быстром стиле и предоставляет альтернативу для попытки в качестве быстрой функции.

Некоторые функции являются просто более быстрыми версиями, но некоторые делают упрощающие предположения, чтобы обеспечить еще большую скорость. Например, встроенные функции map, reduce и foreach должны учитывать вероятность того, что массив, с которым они используются, является разреженным. Пример, приведенный в документации:

var arr = новый массив (100); // разреженный массив со 100 слотами

arr [20] = ‘Привет, мир’;

function logIt (item) {

console.log (элемент);

}

arr.forEach (logIt);

В этом случае в массиве используется только один элемент, а встроенная функция forEach вызывает logIt только один раз. Быстрая альтернатива предполагает, что все массивы полностью используются, то есть не являются разреженными, и позволяет избежать тестирования, которое должна выполнять встроенная функция. Например:

var fast = require (‘fast.js’);

var arr = [1,2,3,4,5];

fast.forEach (arr, logIt); // быстрее, чем arr.forEach (logIt

Вознаграждение за отказ от обработки разреженных массивов состоит в том, что быстрая функция работает до пяти раз быстрее.


Добавить комментарий