Lodash — функциональная библиотека JavaScript


Lodash начинался как форк популярной библиотеки Underscore.js, но с тех пор сумел стать ее расширенным набором, добавляя новые функции и работая намного лучше. Недавно вышла версия 3.4.0.

Он возник из-за потребности в лучшей и более гибкой модуляции, закрывая пробел, оставленный большими библиотеками, такими как jQuery. JQuery, будучи огромной библиотекой, затруднял доступ к отдельным функциям, требуя загрузки всей библиотеки, чтобы получить лишь небольшую необходимую функциональность.

Конечно, вы можете получить собственную библиотеку или подключаемый модуль, но на практике это оказалось неэффективным. Lodash, с другой стороны, предлагал гораздо лучшую модульность, разбивая свои функции на отдельные модули, доступные из npm, несмотря на то, что (минимизированный) полный размер библиотеки составлял всего 19 КБ.

Как и Jquery, Lodash также предлагает настраиваемые сборки и, если требуется более детальный контроль, также дает вам возможность просто импортировать необходимые функции, используя прагму import:

импортировать {добавить} из lodash / fp;

Модульность — это одно, а другое — более чистый и функциональный синтаксис, позволяющий писать более сжатый код. Например, чтобы перебрать массив в функциональном стиле Lodash, сравните:

_.each ([1, 2, 3], функция (значение, индекс) {

console.log (значение);

});

// вывод: 1 2 3

против собственного объектно-ориентированного стиля JavaScript:

[1, 2, 3] .forEach (функция (значение, индекс) {

console.log (значение);

});

// вывод: 1 2 3

Несмотря на более чистый синтаксис, высказывались опасения, что лучше всего использовать собственные функции, чтобы уменьшить зависимость от внешних библиотек и максимизировать переносимость между браузерами. На самом деле, репозиторий GitHub, который вам не нужен (может и не нужен), Lodash / Underscore предлагает параллельное сравнение функций Lodash с их собственными аналогами, точно так же, как пример _.each vs forEach выше

Однако ответ на это заключается в том, что в некоторых случаях функции Lodash предлагают дополнительные функции и оптимизацию, что приводит к значительному увеличению производительности. Хороший обзор и параллельные тесты можно найти на странице Вы не знаете (возможно, не знаете) о Lodash / Underscore.

Здесь мы обнаруживаем, что функция _.each в Lodash превосходит свою родную функцию forEach на 89% процентов, потому что первая имеет микрооптимизацию в этой подпрограмме, которая может выйти из итерации раньше, явно вернув false!

// Подчеркивание / Lodash

_.each ([1, 2, 3], функция (значение, индекс) {

console.log (значение);

вернуть ложь;

});

// вывод: 1

// Родной

[1, 2, 3] .forEach (функция (значение, индекс) {

вернуть ложь; // не выходит из итерации!

});

// вывод: 1 2 3

В другом примере _.map vs .map мы указываем на дополнительную функциональность:

Native не поддерживает сокращенную запись _.property iteratee.

// Подчеркивание / Lodash

var users = [

{‘user’: ‘barney’},

{‘user’: ‘fred’}

];

var arr = _.map (пользователи, ‘пользователь’);

console.log (об);

// вывод: [‘barney’, ‘fred’]

// Родной

var users = [

{‘user’: ‘barney’},

{‘user’: ‘fred’}

];

var arr = users.map (‘пользователь’);

// ошибка!

Если этого было недостаточно, чтобы убедить вас разобраться с библиотекой, есть также автор Лодаша Джон-Дэвид Далтон, свидетельствующий о том, что

«Если вы используете только несколько методов для массивов и не заботитесь о защите нулевого значения, итерации объектов, сглаживании проблем с enviro / ES5 / ES6, функциональных возможностях FP, сокращениях итераций, ленивых вычислениях или других улучшениях, тогда встроенные путь к успеху «.

Например, в случае частичного применения функции Lodash предлагает методы _.partial и _.partialright, которые делают эту задачу намного проще и естественнее, чем эквивалент JavaScript.

Помимо этого, есть много похвал за простой механизм шаблонов Loadash, потому что он позволяет использовать все возможности и синтаксис JavaScript при написании вашего шаблона; здесь нет DSL. Скомпилированный шаблон преобразуется в функцию JavaScript, которая в конечном итоге выполняется в клиенте для создания окончательного HTML.

Наконец, еще одна особенность, о которой не так много говорят публично, — это использование функции _.escape для очистки пользовательского ввода, что позволяет избежать инъекций XSS. Он настолько полезен, что в основном используется как отдельный модуль.


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