Mengapa seseorang lebih memilih perpustakaan utilitas lodash.js atau underscore.js daripada yang lain?
Lodash tampaknya menjadi pengganti drop-in untuk garis bawah, yang terakhir telah ada lebih lama.
Saya pikir keduanya brilian, tetapi saya tidak cukup tahu tentang bagaimana mereka bekerja untuk membuat perbandingan berpendidikan, dan saya ingin tahu lebih banyak tentang perbedaan.
underscore.js
javascript
lodash
Brian M. Hunt
sumber
sumber
lodash
danunderscore
berada di bawah utas gabungan sekarangJawaban:
Saya membuat Lo-Dash untuk memberikan dukungan iterasi lintas-lingkungan yang lebih konsisten untuk array, string, objek, dan
arguments
objek 1 . Sejak itu menjadi superset dari Underscore, memberikan perilaku API yang lebih konsisten, lebih banyak fitur (seperti dukungan AMD, klon dalam, dan penggabungan dalam), dokumentasi dan unit test yang lebih teliti (tes yang berjalan di Node, Ringo, Badak, Narino, Narwhal, PhantomJS , dan browser), kinerja keseluruhan yang lebih baik dan optimisasi untuk array besar / iterasi objek, dan lebih banyak fleksibilitas dengan build kustom dan utilitas template pra-kompilasi.Karena Lo-Dash diperbarui lebih sering daripada Underscore,
lodash underscore
build disediakan untuk memastikan kompatibilitas dengan versi stabil terbaru dari Underscore.Pada satu titik saya bahkan diberi akses push ke Underscore, sebagian karena Lo-Dash bertanggung jawab untuk mengangkat lebih dari 30 masalah; perbaikan bug pendaratan, fitur baru, & peningkatan kinerja di Underscore v1.4.x +.
Selain itu, setidaknya ada 3 pelat punggung Backbone yang menyertakan Lo-Dash secara default dan Lo-Dash sekarang disebutkan dalam dokumentasi resmi Backbone .
Lihat pos Kit Cambridge, Katakan "Halo" kepada Lo-Dash , untuk perincian lebih dalam tentang perbedaan antara Lo-Dash dan Underscore.
Catatan kaki:
arguments
objek. Di browser yang lebih baru, metode Garis Bawah mengabaikan lubang dalam array , "Objek" metode iteratearguments
objek, string diperlakukan seperti array, dan metode dengan benar fungsi iterate (mengabaikan properti "prototipe" mereka) dan objek (iterating properti yang dibayangi seperti "toString" dan "valueOf"), sementara di browser lama mereka tidak akan melakukannya. Juga, garis bawah metode seperti_.clone
mempertahankan lubang dalam array, sementara yang lain suka_.flatten
.sumber
Lo-Dash terinspirasi oleh garis bawah, tetapi saat ini adalah solusi yang unggul. Anda dapat membuat bangunan kustom , memiliki kinerja lebih tinggi , mendukung AMD, dan memiliki fitur tambahan yang hebat . Periksa tolok ukur Lo-Dash vs Underscore ini di jsperf dan .. pos mengagumkan tentang lo-dasbor ini :
Salah satu fitur paling berguna ketika Anda bekerja dengan koleksi, adalah sintaks singkatan:
(diambil dari lodash docs )
sumber
filter
fitur dalam garis bawah dari 2012 github.com/jashkenas/underscore/issues/648 (namanyawhere
)Jika seperti saya Anda mengharapkan daftar perbedaan penggunaan antara garis bawah dan lodash, ada panduan untuk bermigrasi dari garis bawah ke lodash .
Berikut keadaan saat ini untuk anak cucu:
sumber
Selain jawaban John, dan membaca di Lodash (yang sebelumnya saya anggap sebagai "saya juga" untuk menggarisbawahi), dan melihat tes kinerja, membaca kode sumber, dan posting blog , beberapa poin yang membuat lodash jauh lebih unggul daripada garis bawah adalah ini:
Ini bukan tentang kecepatan, karena ini tentang konsistensi kecepatan (?)
The tambahan di lodash juga cukup berguna.
Berikut adalah daftar perbedaan antara lodash, dan garis bawahnya adalah pengganti drop-in untuk proyek garis bawah Anda.
sumber
Ini tahun 2014 dan beberapa tahun sudah terlambat. Tetap saya pikir poin saya berpendapat:
IMHO diskusi ini menjadi tidak proporsional sedikit. Mengutip posting blog yang disebutkan di atas :
Seolah-olah "loop sederhana" dan "vanila Javascript" lebih asli daripada implementasi metode objek. Astaga ...
Pasti menyenangkan memiliki satu sumber kebenaran, tetapi tidak ada. Bahkan jika Anda diberitahu sebaliknya, tidak ada Dewa Vanilla, sayangku. Maafkan saya. Satu-satunya asumsi yang benar-benar berlaku adalah bahwa kita semua menulis kode Javascript yang bertujuan untuk berkinerja baik di semua browser utama, mengetahui bahwa mereka semua memiliki implementasi yang berbeda dari hal-hal yang sama. Itu menyebalkan untuk diatasi, untuk membuatnya lebih halus. Tapi itu premis, apakah Anda suka atau tidak.
Mungkin Anda semua sedang mengerjakan proyek skala besar yang membutuhkan kinerja twitterish sehingga Anda benar-benar melihat perbedaan antara 850.000 (garis bawah) vs 2.500.000 (pengalihan) pengulangan atas daftar per detik sekarang!
Untuk satu aku tidak. Maksud saya, saya mengerjakan proyek di mana saya harus mengatasi masalah kinerja, tetapi mereka tidak pernah diselesaikan atau disebabkan oleh Underscore maupun Lo-Dash. Dan kecuali saya memahami perbedaan nyata dalam implementasi dan kinerja (kita berbicara C + + sekarang) dari katakanlah loop atas iterable (objek atau array, jarang atau tidak!), Saya lebih suka tidak terganggu dengan klaim berdasarkan hasil platform patokan yang sudah disetujui .
Hanya perlu satu pembaruan tunggal katakanlah Badak untuk mengatur implementasi metode Array dengan cara yang tidak satu pun "metode loop abad pertengahan berkinerja lebih baik dan selamanya dan yang lainnya" imam dapat berdebat tentang fakta sederhana bahwa semua metode array tiba-tiba dalam FF jauh lebih cepat daripada brainfuck yang dikemukakannya. Man, Anda tidak bisa menipu lingkungan runtime Anda dengan menipu lingkungan runtime Anda! Pikirkan tentang itu ketika mempromosikan ...
... lain kali.
Jadi agar tetap relevan:
Pilih pendekatan apa pun yang paling sesuai dengan kebutuhan Anda. Seperti biasa. Saya lebih suka fallback pada implementasi aktual daripada curang runtime yang disarankan kapan saja tetapi bahkan itu tampaknya menjadi masalah selera saat ini. Tetap berpegang pada sumber daya berkualitas seperti http://developer.mozilla.com dan http://caniuse.com dan Anda akan baik-baik saja.
sumber
Array.from
mereka mungkin bahkan tidak akan tahu apa yang seharusnya dilakukan. Orang-orang "sabuk utilitas" JS tampaknya terlalu peduli dengan mempromosikan solusi oh-begitu-genial mereka sehingga mereka cenderung lupa bahwa dengan melakukan itu, mereka sebenarnya melemahkan proses standardisasi. Tidak perlu fitur menyebabkan tidak ada tekanan pada "produsen" browser. Fakta menyenangkan: 2 dari 4 browser utama didasarkan pada proyek sumber terbuka ( 1 , 2 ).Saya setuju dengan sebagian besar hal yang dikatakan di sini, tetapi saya hanya ingin menunjukkan argumen yang mendukung underscore.js: ukuran perpustakaan.
Khususnya jika Anda sedang mengembangkan aplikasi atau situs web yang sebagian besar ingin digunakan pada perangkat seluler, ukuran bundel yang dihasilkan dan efek pada waktu boot atau unduhan mungkin memiliki peran penting.
Sebagai perbandingan, ukuran ini adalah yang saya perhatikan dengan source-map-explorer setelah menjalankan layanan ion:
diedit Februari 2020 :
seseorang dapat menggunakan BundlePhobia untuk memeriksa ukuran Lo-Dash dan Underscore saat ini
sumber
source-map-explorer after running ionic serve
Tidak yakin apakah itu yang dimaksud OP, tetapi saya menemukan pertanyaan ini karena saya sedang mencari daftar masalah yang harus saya ingat ketika bermigrasi dari garis bawah ke lodash.
Saya akan sangat menghargai jika seseorang memposting artikel dengan daftar lengkap perbedaan tersebut. Mari saya mulai dengan hal-hal yang telah saya pelajari dengan susah payah (yaitu, hal-hal yang membuat kode saya meledak pada produksi: /):
_.flatten
di garis bawah dalam secara default dan Anda harus memberikan true sebagai argumen kedua untuk membuatnya dangkal. Dalam lodash itu dangkal secara default dan melewati true karena argumen kedua akan membuatnya mendalam! :)_.last
di garis bawah menerima argumen kedua yang memberitahu berapa banyak elemen yang Anda inginkan. Dilodash
sana tidak ada opsi seperti itu. Anda dapat meniru ini dengan.slice
_.first
(masalah yang sama)_.template
dalam garis bawah dapat digunakan dalam banyak cara, salah satunya adalah menyediakan string dan data template dan mendapatkanHTML
kembali (atau setidaknya begitulah cara kerjanya beberapa waktu lalu). Dilodash
Anda menerima fungsi yang Anda harus memberi makan dengan data._(something).map(foo)
bekerja di garis bawah, tetapi di lodash saya harus menulis ulang_.map(something,foo)
. Mungkin itu hanyaTypeScript
-issuesumber
_(something).map(foo).value()
.http://benmccormick.org/2014/11/12/underscore-vs-lodash/
Artikel terbaru membandingkan keduanya oleh Ben McCormick:
sumber
Saya hanya menemukan satu perbedaan yang akhirnya menjadi penting bagi saya. Versi non-garis bawah-kompatibel lodash ini
_.extend()
tidak tidak menyalin properti kelas-tingkat-ditentukan atau metode.Saya telah membuat tes Jasmine di CoffeeScript yang menunjukkan ini:
https://gist.github.com/softcraft-development/1c3964402b099893bd61
Untungnya,
lodash.underscore.js
mempertahankan perilaku Underscore menyalin segala sesuatu, yang untuk situasi saya adalah perilaku yang diinginkan.sumber
lodash punya
_.mapValues()
yang identik dengan underescore_.mapObject()
.sumber
Sebagian besar garis bawah adalah subset dari lodash. Kadang-kadang, seperti garis bawah saat ini akan memiliki fungsi-fungsi kecil yang keren lodash tidak memiliki seperti mapObject. Yang ini menghemat banyak waktu dalam pengembangan proyek saya.
sumber
Mereka sangat mirip, dengan Lodash mengambil alih ...
Keduanya adalah perpustakaan utilitas yang membawa dunia utilitas dalam JavaScript ...
Sepertinya Lodash semakin diperbarui secara berkala sekarang, jadi lebih banyak digunakan dalam proyek terbaru ...
Juga Lodash tampaknya lebih ringan oleh beberapa KB ...
Keduanya memiliki api dan dokumen yang bagus, tetapi saya pikir Lodash lebih baik ...
Berikut adalah tangkapan layar untuk setiap dokumen untuk mendapatkan nilai pertama array ...
menggarisbawahi:
Lodash:
Karena banyak hal dapat diperbarui dari waktu ke waktu, cukup periksa situs web mereka juga ...
Lodash
menggarisbawahi
sumber