¿Por qué alguien preferiría la biblioteca de utilidad lodash.js o underscore.js sobre la otra?
Lodash parece ser un reemplazo directo para el guión bajo, este último ha existido por más tiempo.
Creo que ambos son brillantes, pero no sé lo suficiente sobre cómo funcionan para hacer una comparación educada, y me gustaría saber más sobre las diferencias.
underscore.js
javascript
lodash
Brian M. Hunt
fuente
fuente
lodash
yunderscore
están bajo hilo de fusión ahoraRespuestas:
Creé Lo-Dash para proporcionar una compatibilidad de iteración entre entornos más coherente para matrices, cadenas, objetos y
arguments
objetos 1 . Desde entonces se ha convertido en un superconjunto de Underscore, proporcionando un comportamiento API más consistente, más funciones (como soporte AMD, clonación profunda y fusión profunda), documentación más exhaustiva y pruebas unitarias (pruebas que se ejecutan en Node, Ringo, Rhino, Narwhal, PhantomJS y navegadores), un mejor rendimiento general y optimizaciones para matrices grandes / iteración de objetos, y más flexibilidad con compilaciones personalizadas y utilidades de precompilación de plantillas.Debido a que Lo-Dash se actualiza con más frecuencia que Underscore, se proporciona una
lodash underscore
compilación para garantizar la compatibilidad con la última versión estable de Underscore.En un momento, incluso me dieron acceso push a Underscore, en parte porque Lo-Dash es responsable de plantear más de 30 problemas; soluciones de errores de aterrizaje, nuevas características y ganancias de rendimiento en Underscore v1.4.x +.
Además, hay al menos 3 repeticiones de Backbone que incluyen Lo-Dash por defecto y Lo-Dash ahora se menciona en la documentación oficial de Backbone .
Mira la publicación de Kit Cambridge, Di "Hola" a Lo-Dash , para un desglose más profundo sobre las diferencias entre Lo-Dash y Underscore.
Notas al pie:
arguments
objetos. En los navegadores más nuevos, los métodos de subrayado ignoran los agujeros en las matrices , los métodos de "Objetos" iteranarguments
objetos, las cadenas se tratan como una matriz y los métodos iteran correctamente las funciones (ignorando su propiedad "prototipo") y los objetos (iterando propiedades sombreadas como "toString" y "valueOf"), mientras que en navegadores más antiguos no lo harán. Además, los métodos de subrayado como_.clone
preservar agujeros en matrices, mientras que otros_.flatten
no.fuente
Lo-Dash está inspirado en el guión bajo, pero hoy en día es una solución superior. Puede realizar sus compilaciones personalizadas , tener un mayor rendimiento , admitir AMD y tener excelentes funciones adicionales . Comprueba estos puntos de referencia Lo-Dash vs Underscore en jsperf y ... esta impresionante publicación sobre lo-dash :
Una de las características más útiles cuando trabaja con colecciones es la sintaxis abreviada:
(tomado de lodash docs )
fuente
filter
en subrayado de 2012 github.com/jashkenas/underscore/issues/648 (su nombre eswhere
)Si, como yo, esperaba una lista de diferencias de uso entre subrayado y lodash, hay una guía para migrar de subrayado a lodash .
Aquí está el estado actual de la posteridad:
fuente
Además de la respuesta de John, y leer sobre lodash (que hasta ahora había considerado como un "yo también" para subrayar), y ver las pruebas de rendimiento, leer el código fuente y las publicaciones de blog , los pocos puntos que hacen lodash Estos son muy superiores al guión bajo:
No se trata de la velocidad, ya que se trata de la consistencia de la velocidad (?)
Los extras en lodash también son bastante útiles.
Aquí hay una lista de diferencias entre lodash, y su subrayado-construcción es un reemplazo directo para sus proyectos de subrayado.
fuente
Esto es 2014 y un par de años demasiado tarde. Todavía creo que mi punto es válido:
En mi humilde opinión, esta discusión se volvió bastante desproporcionada. Citando la publicación del blog antes mencionada :
Como si "bucles simples" y "Javascript vainilla" fueran más nativos que las implementaciones de métodos Array u Object. Dios ...
Ciertamente sería bueno tener una sola fuente de verdad, pero no la hay. Incluso si te han dicho lo contrario, no hay Dios de vainilla, querida. Lo siento. La única suposición que realmente se cumple es que todos estamos escribiendo código Javascript que tiene como objetivo un buen desempeño en todos los principales navegadores, sabiendo que todos ellos tienen implementaciones diferentes de las mismas cosas. Es una perra con la que lidiar, por decirlo suavemente. Pero esa es la premisa, te guste o no.
¡Quizás estén trabajando en proyectos a gran escala que necesitan un rendimiento de Twitter para que realmente vean la diferencia entre 850,000 (subrayado) y 2,500,000 (lodash) iteraciones en una lista por segundo en este momento!
Yo por mi parte no lo soy. Quiero decir, trabajé en proyectos donde tenía que abordar problemas de rendimiento, pero nunca fueron resueltos ni causados por Underscore ni Lo-Dash. Y a menos que comprenda las diferencias reales en la implementación y el rendimiento (estamos hablando de C ++ en este momento) de, digamos, un bucle sobre un iterable (objeto o matriz, disperso o no), prefiero no molestarme con ninguno afirmaciones basadas en los resultados de una plataforma de referencia que ya es obstinada .
Solo necesita una única actualización de, digamos, Rhino para prender fuego a sus implementaciones de métodos Array de tal manera que ni un solo "método de bucle medieval funcione mejor y para siempre", y el sacerdote puede discutir sobre el simple hecho de que todos Los métodos de matriz repentina en FF son mucho más rápidos que su mentalidad obstinada. Hombre, ¡no puedes engañar a tu entorno de ejecución engañando a tu entorno de ejecución! Piensa en eso al promocionar ...
... la próxima vez.
Entonces, para mantenerlo relevante:
Elija el enfoque que mejor se adapte a sus necesidades. Como siempre. Preferiría fallos en implementaciones reales en lugar de trucos de tiempo de ejecución obstinados en cualquier momento, pero incluso eso parece ser cuestión de gustos hoy en día. Apéguese a recursos de calidad como http://developer.mozilla.com y http://caniuse.com y estará bien.
fuente
Array.from
ellos, probablemente ni siquiera sabrían lo que se supone que debe hacer. La gente del "cinturón de servicios" de JS parece estar demasiado preocupada con la promoción de sus soluciones tan geniales que tienden a olvidar que al hacerlo, en realidad están diluyendo el proceso de estandarización. La ausencia de funciones no genera presión sobre los "fabricantes" del navegador. Dato curioso: 2 de los 4 principales navegadores se basan en proyectos de código abierto ( 1 , 2 ).Estoy de acuerdo con la mayoría de las cosas que se dicen aquí, pero solo quiero señalar un argumento a favor de underscore.js: el tamaño de la biblioteca.
Especialmente en caso de que esté desarrollando una aplicación o sitio web que pretenda utilizar principalmente en dispositivos móviles, el tamaño del paquete resultante y el efecto en el tiempo de arranque o descarga pueden tener un papel importante.
A modo de comparación, estos tamaños son los que noté con source-map-explorer después de ejecutar el servicio iónico:
editado en febrero de 2020 :
uno puede usar BundlePhobia para verificar el tamaño actual de Lo-Dash y subrayado
fuente
source-map-explorer after running ionic serve
No estoy seguro de si eso es lo que OP quiso decir, pero me encontré con esta pregunta porque estaba buscando una lista de problemas que debo tener en cuenta al migrar de subrayado a lodash.
Realmente agradecería si alguien publicara un artículo con una lista completa de tales diferencias. Permítanme comenzar con las cosas que aprendí por las malas (es decir, cosas que hicieron que mi código explotara en producción: /):
_.flatten
en guión bajo es profundo de forma predeterminada y debe pasar verdadero como segundo argumento para hacerlo superficial. En lodash es poco profundo por defecto y pasar verdadero como segundo argumento lo hará más profundo! :)_.last
en guión bajo acepta un segundo argumento que indica cuántos elementos desea. Enlodash
no hay tal opción. Puedes emular esto con.slice
_.first
(mismo problema)_.template
en subrayado se puede usar de muchas maneras, una de las cuales es proporcionar la cadena de plantilla y los datos yHTML
volver (o al menos así fue como funcionó hace algún tiempo). Enlodash
usted recibe una función que luego debe alimentar con los datos._(something).map(foo)
funciona en guión bajo, pero en lodash tuve que reescribirlo_.map(something,foo)
. Quizás eso fue solo unTypeScript
problemafuente
_(something).map(foo).value()
.http://benmccormick.org/2014/11/12/underscore-vs-lodash/
Último artículo comparando los dos de Ben McCormick:
fuente
Acabo de encontrar una diferencia que terminó siendo importante para mí. La versión no-guión-compatibles de lodash de
_.extend()
hace no copia sobre propiedades o métodos de clase de nivel definidas.He creado una prueba de Jasmine en CoffeeScript que demuestra esto:
https://gist.github.com/softcraft-development/1c3964402b099893bd61
Afortunadamente,
lodash.underscore.js
conserva el comportamiento de Underscore de copiar todo, que para mi situación era el comportamiento deseado.fuente
Lodash tiene lo
_.mapValues()
que es idéntico a la puntuación baja_.mapObject()
.fuente
En su mayor parte, el guión bajo es un subconjunto de lodash. A veces, como el subrayado actual tendrá pequeñas funciones geniales, lodash no tiene como mapObject. Este me ahorró mucho tiempo en el desarrollo de mi proyecto.
fuente
Son bastante similares, con Lodash está haciendo cargo ...
Ambos son una biblioteca de utilidad que toma el mundo de la utilidad en JavaScript ...
Parece que Lodash se está actualizando más regularmente ahora, por lo que se usa más en los últimos proyectos ...
También Lodash parece ser más ligero por un par de KB ...
Ambos tienen una buena api y doc, pero creo que Lodash es mejor ...
Aquí hay una captura de pantalla para cada uno de los documentos para obtener el primer valor de una matriz ...
guion bajo:
lodash:
Como las cosas pueden actualizarse de vez en cuando, solo revise su sitio web también ...
lodash
guion bajo
fuente