underscore.js - Diferenças entre lodash e sublinhado




5 Answers

Lo-Dash é inspirado pelo sublinhado, mas hoje em dia é uma solução superior. Você pode fazer suas construções personalizadas , ter um desempenho mais alto , oferecer suporte à AMD e ter ótimos recursos extras . Confira este benchmark Lo-Dash vs Underscore no jsperf e .. este post incrível sobre lo-dash :

Um dos recursos mais úteis quando você trabalha com coleções é a sintaxe abreviada:

var characters = [
  { 'name': 'barney', 'age': 36, 'blocked': false },
  { 'name': 'fred',   'age': 40, 'blocked': true }
];

// using "_.filter" callback shorthand
_.filter(characters, { 'age': 36 });

// using underscore
_.filter(characters, function(character) { return character.age === 36; } );

// → [{ 'name': 'barney', 'age': 36, 'blocked': false }]

(retirado da lodash docs )

underscore.js javascript lodash

Por que alguém preferiria a biblioteca de utilitários lodash.js ou underscore.js sobre a outra?

Lodash parece ser um substituto para sublinhado, o último tendo sido em torno de mais tempo.

Eu acho que ambos são brilhantes, mas eu não sei o suficiente sobre como eles funcionam para fazer uma comparação educada, e gostaria de saber mais sobre as diferenças.




Além da resposta de John, e lendo sobre o lodash (que eu até então tinha considerado como "eu-também" para sublinhar), e vendo os testes de desempenho, lendo o código-fonte e posts , os poucos pontos que fazem lodash muito superior ao sublinhado são estes:

  1. Não é sobre a velocidade, como é sobre a consistência da velocidade (?)

    Se você olhar para o código-fonte do sublinhado, verá nas primeiras linhas que o sublinhado recai sobre as implementações nativas de muitas funções. Embora em um mundo ideal, essa teria sido uma abordagem melhor, se você olhar para alguns dos links perf indicados nesses slides , não é difícil tirar a conclusão de que a qualidade dessas 'implementações nativas' varia muito de navegador. para o navegador. O Firefox é extremamente rápido em algumas das funções, e em alguns domina o Chrome. (Eu imagino que haveria alguns cenários onde o IE dominaria também). Acredito que é melhor preferir um código cujo desempenho seja mais consistente entre os navegadores.

    Leia a postagem do blog anterior e, em vez de acreditar no assunto, julgue por si mesmo executando os benchmarks . Estou atordoado agora, vendo uma lodash se apresentando 100-150% mais rápida do que o sublinhado em funções nativas simples , como o Array.every no Chrome!

  2. Os extras em lodash também são bastante úteis.

  3. Quanto ao comentário altamente falado de Xananax sugerindo contribuição para o código de sublinhado: é sempre melhor ter boa concorrência, não apenas manter a inovação funcionando, mas também levar você a se manter (ou a sua biblioteca) em boa forma.

Aqui está uma lista de diferenças entre o lodash, e o underscore-build é um substituto para os seus projetos de sublinhado.




Eu concordo com a maioria das coisas ditas aqui, mas eu só quero apontar um argumento em favor do underscore.js: o tamanho da biblioteca.

Especialmente no caso de você estar desenvolvendo um aplicativo ou site que pretenda ser usado principalmente em dispositivos móveis, o tamanho do pacote resultante e o efeito no tempo de inicialização ou download podem ter um papel importante.

Para comparação, esses tamanhos são aqueles que eu notei com o explorador de mapas de origem depois de executar o serviço iônico:

lodash: 523kB
underscore.js: 51.6kb



http://benmccormick.org/2014/11/12/underscore-vs-lodash/

Último artigo comparando os dois por Ben McCormick:

  1. A API do Lo-Dash é um superconjunto do Underscore.

  2. Sob o capô [Lo-Dash] foi completamente reescrito.

  3. Lo-Dash definitivamente não é mais lento que Underscore.

  4. O que o Lo-Dash adicionou?

    • Melhorias de usabilidade
    • Funcionalidade Extra
    • Ganhos de desempenho
    • Sintaxes de taquigrafia para encadeamento
    • Custom Builds para usar apenas o que você precisa
    • Versão semântica e cobertura de código de 100%



O lodash tem o _.mapValues() que é idêntico ao _.mapObject() do _.mapObject() .






Related