Почему кто-то предпочитает библиотеку утилит lodash.js или underscore.js другим?
Lodash, кажется, является заменой нижнего подчеркивания, последний был дольше.
Я думаю, что оба великолепны, но я не знаю достаточно о том, как они работают, чтобы сделать образованное сравнение, и я хотел бы узнать больше о различиях.
underscore.js
javascript
lodash
Брайан М. Хант
источник
источник
lodash
иunderscore
находятся под слиянием нити в настоящее времяОтветы:
Я создал Lo-Dash, чтобы обеспечить более согласованную поддержку итераций между средами для массивов, строк, объектов и
arguments
объектов 1 . С тех пор он стал надмножеством Underscore, предоставляя более согласованное поведение API, больше функций (таких как поддержка AMD, глубокое клонирование и глубокое слияние), более тщательную документацию и модульные тесты (тесты, которые выполняются в Node, Ringo, Rhino, Narwhal, PhantomJS и браузеры), лучшая общая производительность и оптимизация для больших итераций массивов / объектов, а также большая гибкость с помощью пользовательских сборок и утилит предварительной компиляции шаблонов.Поскольку Lo-тир обновляется чаще , чем подчёркивание
lodash underscore
сборка обеспечиваются , чтобы обеспечить совместимость с последней версией стабильного подчёркивания.В какой-то момент мне даже дали толчок доступ к Underscore, отчасти потому, что Lo-Dash отвечает за поднятие более 30 проблем; исправления ошибок при посадке, новые функции и улучшения в Underscore v1.4.x +.
Кроме того, есть как минимум 3 базовых шаблона Backbone, которые по умолчанию включают Lo-Dash, и теперь Lo-Dash упоминается в официальной документации Backbone .
Посмотрите на статью Кита Кембриджа « Скажи« Привет »Ло-Дашу» , чтобы узнать о различиях между Ло-Даш и Ундерскоре.
Примечания:
arguments
объектов. В более новых браузерах методы Underscore игнорируют дыры в массивах , методы «Objects» перебираютarguments
объекты, строки обрабатываются как массивы, а методы корректно перебирают функции (игнорируя их свойство «prototype») и объекты (итерируя свойства с затенением, такие как «toString» и "valueOf"), тогда как в старых браузерах их не будет. Кроме того, методы Underscore, такие как_.clone
сохранить дыры в массивах, а другие, как_.flatten
нет.источник
Lo-Dash вдохновлен подчеркиванием, но в настоящее время это превосходное решение. Вы можете создавать свои собственные сборки , иметь более высокую производительность , поддерживать AMD и иметь отличные дополнительные функции . Проверьте тесты Lo-Dash и Underscore на jsperf и ... этот потрясающий пост о lo-dash :
Одной из наиболее полезных функций при работе с коллекциями является сокращенный синтаксис:
(взято из документации lodash )
источник
filter
особенность в подчеркивании с 2012 года github.com/jashkenas/underscore/issues/648 (его зовутwhere
)Если, как и я, вы ожидаете получить список различий между подчеркиванием и lodash, есть руководство по переходу с подчеркивания на lodash .
Вот текущее состояние для потомков:
источник
В дополнение к ответу Джона, чтению lodash (которое я до сих пор считал «я тоже», чтобы подчеркнуть), а также ознакомлению с тестами производительности, чтением исходного кода и сообщениями в блоге , некоторые моменты, которые делают lodash намного лучше, чем подчеркнуть это:
Дело не в скорости, а в постоянстве скорости (?)
В дополнительных услугах в lodash также являются весьма полезными.
Вот список различий между lodash, и его подчеркивание - это замена для ваших проектов подчеркивания.
источник
Это 2014 год и на пару лет поздно. Тем не менее, я думаю, что моя точка зрения верна:
ИМХО, эта дискуссия разлетелась совсем немного. Цитирую вышеупомянутую запись в блоге :
Как будто «простые циклы» и «ванильный Javascript» являются более нативными, чем реализации метода Array или Object. Боже ...
Конечно, было бы неплохо иметь единый источник правды, но это не так. Даже если тебе сказали иначе, ванильного бога нет, моя дорогая. Мне жаль. Единственное предположение, которое действительно справедливо, заключается в том, что мы все пишем код Javascript, который направлен на то, чтобы хорошо работать во всех основных браузерах, зная, что все они имеют разные реализации одних и тех же вещей. С этим сука, мягко говоря, справиться. Но это предпосылка, нравится вам это или нет.
Возможно, вы все работаете над крупномасштабными проектами, для которых нужна твиттерская производительность, так что вы действительно видите разницу между 850 000 (подчеркивание) и 2 500 000 (lodash) итерациями по списку в секунду прямо сейчас!
Я, например, нет. Я имею в виду, я работал над проектами, где мне приходилось решать проблемы с производительностью, но они никогда не были решены или вызваны ни Underscore, ни Lo-Dash. И пока я не пойму реальные различия в реализации и производительности (мы сейчас говорим о C ++), скажем, цикла над итеративным (объект или массив, разреженным или нет!), Я скорее не буду беспокоиться о каких-либо претензии, основанные на результатах эталонной платформы, которая уже высказана .
Нужно всего лишь одно обновление, скажем, Rhino, чтобы зажечь свои реализации метода Array таким образом, чтобы ни один «средневековый цикл не работал лучше и навсегда, а священник с чем угодно» не мог спорить о том, что все Методы внезапного массива в FF намного быстрее, чем его / ее самоуверенный псих. Чувак, ты просто не можешь обмануть свою среду выполнения, обманув свою среду выполнения! Подумайте об этом при продвижении ...
... в следующий раз.
Итак, чтобы сохранить это актуальным:
Выберите подход, который больше всего соответствует вашим потребностям. По-прежнему. Я бы предпочел в любое время отступать от реальных реализаций, а не надуманных читов времени выполнения, но даже сейчас это кажется вопросом вкуса. Придерживайтесь качественных ресурсов, таких как http://developer.mozilla.com и http://caniuse.com, и все будет в порядке.
источник
Array.from
они, вероятно, даже не знали бы, что он должен делать. Люди из «сервисного пояса» JS, похоже, настолько сильно озабочены продвижением своих очень благородных обходных путей, что склонны забывать, что этим они фактически ослабляют процесс стандартизации. Отсутствие необходимости в функциях не приводит к давлению на «производителей» браузеров. Интересный факт: 2 из 4 основных браузеров основаны на проектах с открытым исходным кодом ( 1 , 2 ).Я согласен с большинством сказанного здесь, но я просто хочу указать на аргумент в пользу underscore.js: размер библиотеки.
Особенно в случае, если вы разрабатываете приложение или веб-сайт, который намеревается использовать в основном на мобильных устройствах, размер результирующего пакета и влияние на время загрузки или загрузки могут играть важную роль.
Для сравнения, эти размеры те, которые я заметил с source-map-explorer после запуска ionic serve:
отредактировано февраль 2020 :
можно использовать BundlePhobia, чтобы проверить текущий размер Lo-Dash и Underscore
источник
source-map-explorer after running ionic serve
Не уверен, что именно это и имел в виду OP, но я столкнулся с этим вопросом, потому что искал список проблем, о которых нужно помнить при переходе с подчеркивания на lodash.
Я был бы очень признателен, если бы кто-то опубликовал статью с полным списком таких различий. Позвольте мне начать с вещей, которые я выучил трудным путем (то есть вещей, которые заставили мой код взорваться на производстве: /):
_.flatten
в подчеркивании по умолчанию глубокий, и вы должны передать true в качестве второго аргумента, чтобы сделать его поверхностным. В lodash по умолчанию он неглубокий, и передача true в качестве второго аргумента сделает его глубоким! :)_.last
в подчеркивании принимает второй аргумент, который говорит, сколько элементов вы хотите. Уlodash
такой возможности нет. Вы можете подражать этому с.slice
_.first
(та же проблема)_.template
в подчеркивании можно использовать по-разному, одним из которых является предоставление строки шаблона и данных и получениеHTML
обратно (или, по крайней мере, так это работало некоторое время назад). Вlodash
вы получите функцию, которую вы должны затем передать с данными._(something).map(foo)
работает в подчеркивании, но в lodash мне пришлось его переписать_.map(something,foo)
. Возможно, это был простоTypeScript
вопросисточник
_(something).map(foo).value()
.http://benmccormick.org/2014/11/12/underscore-vs-lodash/
Последняя статья, в которой сравниваются две работы Бена Маккормика:
источник
Я только нашел одно различие, которое оказалось важным для меня. Без подчёркивания-совместимая версия lodash - х
_.extend()
вовсе не копировать уровня класса определенных свойств или методов.Я создал тест Жасмин в CoffeeScript, который демонстрирует это:
https://gist.github.com/softcraft-development/1c3964402b099893bd61
К счастью,
lodash.underscore.js
сохраняет поведение Underscore копировать все, что для моей ситуации было желаемым поведением.источник
У Лодаша есть
_.mapValues()
что-то такое же, как у младших_.mapObject()
.источник
По большей части подчеркивание является подмножеством lodash. Время от времени, как в настоящее время подчеркивание будет иметь классные маленькие функции, lodash не имеет, как mapObject. Этот сэкономил мне много времени при разработке моего проекта.
источник
Они очень похожи, с Лодашем ...
Они оба являются утилитарной библиотекой, которая берет мир полезности в JavaScript ...
Кажется, что Lodash теперь обновляется более регулярно, поэтому его чаще используют в последних проектах ...
Кроме того, Lodash кажется легче на пару килобайт ...
Оба имеют хороший API и док, но я думаю, что Lodash один лучше ...
Вот скриншот для каждого из документов для получения первого значения массива ...
подчеркивать:
lodash:
Поскольку вещи могут обновляться время от времени, просто проверьте их веб-сайт также ...
lodash
подчеркивать
источник