Это 2014 год и на пару лет поздно. Тем не менее, я думаю, что моя точка зрения верна:
ИМХО, эта дискуссия разлетелась совсем немного. Цитирую вышеупомянутую запись в блоге :
Большинство утилитарных библиотек JavaScript, таких как Underscore, Valentine и wu, полагаются на «двойной родной подход». Этот подход предпочитает нативные реализации, возвращаясь к обычному JavaScript, только если нативный эквивалент не поддерживается. Но jsPerf обнаружил интересную тенденцию: наиболее эффективный способ перебора массива или массива, подобного массиву, - полностью избежать нативных реализаций, выбрав вместо этого простые циклы.
Как будто «простые циклы» и «ванильный Javascript» являются более нативными, чем реализации метода Array или Object. Боже ...
Конечно, было бы неплохо иметь единый источник правды, но это не так. Даже если тебе сказали иначе, ванильного бога нет, моя дорогая. Мне жаль. Единственное предположение, которое действительно справедливо, заключается в том, что мы все пишем код Javascript, который направлен на то, чтобы хорошо работать во всех основных браузерах, зная, что все они имеют разные реализации одних и тех же вещей. С этим сука, мягко говоря, справиться. Но это предпосылка, нравится вам это или нет.
Возможно, вы все работаете над крупномасштабными проектами, для которых нужна твиттерская производительность, так что вы действительно видите разницу между 850 000 (подчеркивание) и 2 500 000 (lodash) итерациями по списку в секунду прямо сейчас!
Я, например, нет. Я имею в виду, я работал над проектами, где мне приходилось решать проблемы с производительностью, но они никогда не были решены или вызваны ни Underscore, ни Lo-Dash. И пока я не пойму реальные различия в реализации и производительности (мы сейчас говорим о C ++), скажем, цикла над итеративным (объект или массив, разреженным или нет!), Я скорее не буду беспокоиться о каких-либо претензии, основанные на результатах эталонной платформы, которая уже высказана .
Нужно всего лишь одно обновление, скажем, Rhino, чтобы зажечь свои реализации метода Array таким образом, чтобы ни один «средневековый цикл не работал лучше и навсегда, а священник с чем угодно» не мог спорить о том, что все Методы внезапного массива в FF намного быстрее, чем его / ее самоуверенный псих. Чувак, ты просто не можешь обмануть свою среду выполнения, обманув свою среду выполнения! Подумайте об этом при продвижении ...
ваш сервисный пояс
... в следующий раз.
Итак, чтобы сохранить это актуальным:
- Используйте Underscore, если вам это удобно, не жертвуя нативным ишем.
- Используйте Lo-Dash, если вам удобно, и вам нравится его расширенный каталог функций (глубокое копирование и т. Д.), И если вы остро нуждаетесь в мгновенной производительности и, самое главное, не возражаете против выбора альтернативы, как только устаревший API упрямые обходные пути. Что скоро произойдет. Период.
- Есть даже третье решение. DIY! Знай свое окружение. Знайте о несоответствиях. Прочитайте их ( Джон-Дэвид и Джереми ) код. Не используйте то или это, не имея возможности объяснить, почему действительно необходим уровень согласованности / совместимости, который улучшает рабочий процесс или повышает производительность вашего приложения. Весьма вероятно, что ваши требования будут удовлетворены простым полифилом, который вы сможете написать самостоятельно. Обе библиотеки просто ванильные с небольшим количеством сахара. Они оба борются за то, кто подает сладкий пирог . Но, поверьте мне, в конце концов, оба готовят только с водой. Нет ванильного бога, поэтому не может быть и ванильного папы, верно?
Выберите подход, который больше всего соответствует вашим потребностям. По-прежнему. Я бы предпочел в любое время отступать от реальных реализаций, а не надуманных читов времени выполнения, но даже сейчас это кажется вопросом вкуса. Придерживайтесь качественных ресурсов, таких как http://developer.mozilla.com и http://caniuse.com, и все будет в порядке.