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. Он настолько полезен, что в основном используется как отдельный модуль.