Lodash와 Underscore.js의 차이점
Lodash 또는 Underscore.js 유틸리티 라이브러리를 다른 유틸리티 라이브러리보다 선호하는 이유는 무엇입니까?
Lodash는 언더스코어를 대체하고 있는 것 같습니다.하나는 언더스코어를 대체한 지 오래입니다.
둘 다 훌륭하다고 생각합니다만, 교육적인 비교를 하기 위해서 어떻게 기능하는지는 잘 모릅니다만, 그 차이점에 대해 좀 더 알고 싶습니다.
및 Lodash에 일관된 지원을 .arguments
오브젝트1이후 Underscore.js의 슈퍼셋이 되어 보다 일관된 API 동작, 보다 많은 기능(AMD 지원, 딥 클론, 딥 머지 등), 보다 철저한 문서화와 유닛 테스트(Node.js, RingoJ, Rhino, Narwhal, Phantom에서 실행되는 테스트)를 제공하고 있습니다.JS 및 브라우저)는 대규모 어레이/오브젝트 반복을 위한 전반적인 성능과 최적화, 사용자 정의 빌드 및 템플릿 사전 컴파일 유틸리티를 통해 더 많은 유연성을 제공합니다.
는 Underscore더되므로 Lodash® Underscore.js가 업데이트 됩니다.lodash underscore
빌드는 Underscore.js의 최신 안정판과의 호환성을 확보하기 위해 제공됩니다.
Lodash가 Underscore.js v1.4.x+의 버그 수정, 신기능, 퍼포먼스 향상 등 30개 이상의 문제를 제기했기 때문에 Underscore.js에 푸시 액세스 할 수 있었습니다.
또한 Lodash를 기본적으로 포함하는 최소 3개의 Backbone.js 보일러 플레이트가 있으며, Lodash는 현재 Backbone.js의 공식 문서에 언급되어 있습니다.
Lodash와 Underscore.js의 차이점에 대한 자세한 내용은 Kit Cambridge의 게시물인 Say "Hello" to Lo-Dash를 참조하십시오.
각주:
- Underscore.js의 지원이 .
arguments
물건들.새로운 브라우저에서는 Underscore.js 메서드는 어레이의 구멍을 무시하고 "개체" 메서드를 반복합니다.arguments
오브젝트, 문자열은 어레이와 같은 것으로 취급되며 메서드는 함수('프로토타입' 속성 무시)와 오브젝트('toString'이나 'valueOf'와 같은 음영 속성 반복)를 올바르게 반복하지만 오래된 브라우저에서는 그렇지 않습니다.Underscore.예를 들어 Underscore.js 메서드입니다._.clone
유지하는 , 「어레이」등의 경우는,_.flatten
마세요
Lodash는 Underscore.js에서 영감을 얻었지만, 현재는 뛰어난 솔루션입니다.커스텀 빌드, 퍼포먼스 향상, AMD 지원, 뛰어난 추가 기능 등이 가능합니다.이 Lodash와 jsperf에 대한 언더스코어.js 벤치마크 및...Lodash에 대한 멋진 게시물:
컬렉션을 사용할 때 가장 유용한 기능 중 하나는 다음과 같은 단축 구문입니다.
구문이 되고 있습니다만,
var characters = [
{ 'name': 'barney', 'age': 36, 'blocked': false },
{ 'name': 'fred', 'age': 40, 'blocked': true }
];
// Using "_.filter" callback shorthand
_.filter(characters, { 'age': 36 });
// Using Underscore.js
_.filter(characters, function(character) { return character.age === 36; } );
// → [{ 'name': 'barney', 'age': 36, 'blocked': false }]
(Lodash 문서에서 인용)
저처럼 Underscore.js와 Lodash의 사용 차이 목록을 예상하셨다면 Underscore.js에서 Lodash로 마이그레이션하기 위한 가이드가 있습니다.
후세를 위한 현황은 다음과 같습니다.
- 줄
_.any
Lodash lod_.some
- 줄
_.all
Lodash lod_.every
- 줄
_.compose
Lodash lod_.flowRight
- 줄
_.contains
Lodash lod_.includes
- 줄
_.each
을 하면이 허용되지 않습니다.false
- 줄
_.findWhere
Lodash lod_.find
- 줄
_.flatten
반면 .- 줄
_.groupBy
합니다.(value, index, originalArray)
동안 로다쉬의 는는 , , , , , , , , 、_.groupBy
만 전달됩니다.(value)
.- 줄s.js
_.indexOf
파라미터 " " " " " " 를 합니다.undefined
Lodash lod_.indexOf
- 줄s.js
_.indexOf
파라미터 " " " " " " 를 합니다.true
Lodash lod_.sortedIndexOf
- 줄
_.indexBy
Lodash lod_.keyBy
- 줄
_.invoke
Lodash lod_.invokeMap
- 줄
_.mapObject
Lodash lod_.mapValues
- 줄
_.max
Lodash 결합 »_.max
&_.maxBy
- 줄
_.min
Lodash 결합 »_.min
&_.minBy
- 줄
_.sample
Lodash 결합 »_.sample
&_.sampleSize
- 줄
_.object
Lodash 결합 »_.fromPairs
★★★★★★★★★★★★★★★★★」_.zipObject
- 줄
_.omit
_.omitBy
- 줄
_.pairs
Lodash lod_.toPairs
- 줄
_.pick
_.pickBy
- 줄
_.pluck
Lodash lod_.map
- 줄
_.sortedIndex
Lodash 결합 »_.sortedIndex
&_.sortedIndexOf
- 줄
_.uniq
어 byiteratee
Lodash lod_.uniqBy
- 줄
_.where
Lodash lod_.filter
- 줄
_.isFinite
않다Number.isFinite
_.isFinite('1')
true
단, " " " " . js , " ,false
Lodash(서서)- 줄
_.matches
가 안 된다
(예:_.filter(objects, { 'a': { 'b': 'c' } })
)- & 밑 © 1.7 & Lodash
_.template
은 '''입니다'''_.template(string, option)(data)
_.memoize
는 「」입니다.Map
(물체와 같은 것)- Lodash를 .
context
" "를 "_.bind
- Lodash는 암묵적인 체인, 느린 체인, 숏컷 퓨전 지원
- 가 부하가 많은 Lodash를 했습니다.
_.head
,_.last
,_.rest
& , »_.initial
out로로로
_.take
,_.takeRight
,_.drop
& , »_.dropRight
(예:)_.head(array, 2)
는 "".js"" 입니다._.take(array, 2)
Lodash(서서)
John의 답변과 Lodash(지금까지 Underscore.js에 대한 '미투'라고 생각)에 대한 읽기, 퍼포먼스 테스트, 소스 코드 읽기, 블로그 투고 외에 Lodash가 Underscore.js보다 훨씬 뛰어난 몇 가지 포인트는 다음과 같습니다.
- 속도(?)가 아니라 속도(?)의 일관성에 관한 것입니다.
Underscore.js의 소스 코드를 살펴보면 첫 번째 몇 줄에 Underscore.js가 많은 함수의 네이티브 구현에 폴백되어 있음을 알 수 있습니다.이상적인 환경에서는 이것이 더 나은 접근법이었지만, 이 슬라이드에 나와 있는 성능 링크 중 일부를 살펴보면 이러한 '네이티브 구현'의 품질이 브라우저마다 크게 다르다는 결론을 도출하는 것은 어렵지 않습니다.파이어폭스는 어떤 기능에서는 엄청나게 빠르며, 어떤 기능에서는 크롬이 우세하다.(Internet Explorer가 지배하는 시나리오도 있을 수 있습니다).브라우저간에 퍼포먼스가 일관된 코드를 선택하는 것이 좋다고 생각합니다.
블로그의 투고를 빨리 읽고, 그것을 신뢰하기 위해서가 아니라, 벤치마크를 실행해 스스로 판단해 주세요.Lodash가 Underscore.js보다 100~150% 더 빠른 성능을 발휘하는 것을 보고 깜짝 놀랐습니다.
Array.every
★★★★★★★★★★★★★★★★★★!
- Lodash에 있는 엑스트라들도 꽤 유용하다.
- Xananax의 Underscore.js 코드에 대한 기여도를 나타내는 매우 높은 코멘트에 대해서는:항상 좋은 경쟁을 하는 것이 좋습니다.그것은 혁신을 계속할 뿐만 아니라, 당신 자신(또는 당신의 라이브러리)을 좋은 상태로 유지하도록 유도합니다.
다음은 Lodash 간의 차이점 목록입니다.Underscore.js 빌드는 Underscore.js 프로젝트를 대신합니다.
2014년에도 제 요점은 다음과 같습니다.
IMHO씨, 이 토론은 너무 과장되었습니다.전술한 블로그 투고를 인용합니다.
Underscore, Valentine 및 wu와 같은 대부분의 JavaScript 유틸리티 라이브러리는 "네이티브 우선 듀얼 접근법"에 의존합니다.이 접근법은 네이티브 구현을 선호하며 네이티브가 지원되지 않는 경우에만 바닐라 JavaScript로 돌아갑니다.그러나 jsPerf는 흥미로운 경향을 드러냈습니다. 어레이 또는 어레이와 같은 컬렉션에 대해 반복하는 가장 효율적인 방법은 네이티브 구현을 완전히 피하고 대신 단순한 루프를 선택하는 것입니다.
마치 어레이 또는 오브젝트 메서드 구현보다 '심플 루프'와 '바닐라 자바스크립트'가 네이티브인 것처럼 보입니다.이런...
진실의 원천이 하나라도 있으면 좋겠지만, 없어요.다른 말을 들었다 해도 바닐라 신은 없어죄송해요.모든 주요 브라우저가 동일한 기능을 구현하고 있다는 것을 알고 모든 주요 브라우저에서 뛰어난 성능을 발휘하는 자바스크립트 코드를 작성해야 한다는 것이 유일한 전제입니다.부드럽게 말하자면, 감당하기 힘든 년이야.하지만 당신이 좋든 싫든 그건 전제가 됩니다.
여러분 모두 트위터를 통한 퍼포먼스를 필요로 하는 대규모 프로젝트에 종사하고 있을 것입니다.그러면 현재 리스트당 850,000회(Undercore.js)와 2,500,000회(Lodash)의 반복이 실제로 어떻게 다른지 알 수 있습니다.
나는 그렇지 않다.성능 문제를 해결해야 하는 프로젝트를 진행했지만 Underscore.js도 Lodash도 해결하지 못했습니다.또, 예를 들면, 반복 가능한 루프(오브젝트 또는 어레이, 스파스 또는 스파스 없음)의 실장이나 퍼포먼스의 실제적인 차이(C++)를 파악하지 않는 한, 이미 의도된 벤치마크 플랫폼의 결과에 근거하는 어떠한 주장에도 개의치 않습니다.
예를 들어, Rhino가 Array 메서드 구현을 단 한 번의 업데이트만으로 "중세의 루프 메서드"가 전혀 더 잘 작동하지 않으며 Firefox에서 갑자기 어레이 메서드가 모두 자신이 생각하는 것보다 훨씬 더 빠르다는 단순한 사실을 설득할 수 있습니다.런타임 환경을 속여서 런타임 환경을 속일 수는 없습니다.홍보할 때 그 점을 고려해서...
유틸리티 벨트
...다음에.
관련성을 유지하기 위해:
- 원어민 특유의 편리함을 희생하지 않고 Underscore.js를 사용합니다.
- 편리하고 확장기능 카탈로그(딥카피 등)가 마음에 들고 즉각적인 퍼포먼스가 절실히 필요한 경우, 그리고 가장 중요한 것은 네이티브 API가 뛰어난 회피책을 찾는 즉시 다른 방법을 선택하는 것을 꺼리지 않는다면 Lodash를 사용하십시오.곧 일어날 일이야마침표
- 세 번째 해결책도 있습니다.DIY! 환경을 파악하세요.모순에 대해 알고 있다.그들의 (John-David와 Jeremy의) 코드를 읽어보세요.일관성/호환성 계층이 정말로 필요한 이유와 워크플로우를 향상시키거나 애플리케이션의 성능을 향상시키는 이유를 설명할 수 없는 상태에서 이것저것 사용하지 마십시오.사용자가 직접 작성할 수 있는 간단한 폴리필로 요구 사항을 충족할 수 있습니다.두 도서관 모두 약간의 설탕이 첨가된 평범한 바닐라입니다.둘 다 누가 가장 달콤한 파이를 대접하느냐를 두고 싸운다.하지만 결국엔 둘 다 물로만 요리하는 거야바닐라 신이 없으니 바닐라 포프가 있을 리 없죠?
고객의 요구에 가장 적합한 접근 방식을 선택하십시오.평소처럼.저는 언제든지 의도적인 런타임 부정행위보다 실제 구현에 대한 폴백을 선호하지만, 요즘은 그것마저도 취향의 문제인 것 같습니다.http://developer.mozilla.com 나 http://caniuse.com 와 같은 고품질 리소스를 계속 활용하면 문제 없습니다.
여기서 말하는 대부분의 것에 동의하지만 Underscore.js: 라이브러리의 크기라는 논점을 지적하고 싶습니다.
특히 모바일 기기에서 주로 사용하고자 하는 앱이나 웹사이트를 개발하는 경우 번들의 크기와 부팅 또는 다운로드 시간에 미치는 영향이 중요한 역할을 할 수 있습니다.
비교하기 위해 Ionic serve 실행 후 source-map-explector에서 알게 된 사이즈는 다음과 같습니다.
Lodash: 523 kB
Underscore.js: 51.6 kB
BundlePhobia를 사용하여 Lodash와 Underscore.js의 현재 크기를 확인할 수 있습니다.
그것이 OP의 의미인지는 모르겠지만 Underscore.js에서 Lodash로 이행할 때 유의해야 할 문제의 목록을 찾고 있었기 때문에 이 질문을 하게 되었습니다.
그런 차이점을 적은 글을 올려주시면 감사하겠습니다.지금까지 어렵게 배운 것(즉, 프로덕션에서 코드를 폭발시킨 것)부터 시작하겠습니다./
_.flatten
Underscore.js unders unders unders unders 。사실두 : ) Lodash true 。_.last
Underscore.js에서는 필요한 요소의 수를 나타내는두 번째 인수를 받아들입니다.로다시을 「」로 할 수 ..slice
_.first
(동일호)_.template
Underscore.js unders unders unders 。그 중 하나는 템플릿 문자열과 데이터를 제공하고 HTML을 되돌리는 것입니다(또는 적어도 얼마 전에는 그렇게 동작했습니다).Lodash에서는 데이터와 함께 제공해야 하는 기능을 제공합니다._(something).map(foo)
에서는 Underscore.js로 ._.map(something,foo)
그건TypeScript
-issue. - .
Underscore vs Lo-Dash by Ben McCormick은 이 두 가지를 비교한 최신 기사입니다.
- Lodash의 API는 Underscore.js의 슈퍼셋입니다.
- Lodash는 완전히 다시 쓰여졌다.
- Lodash는 Underscore.js보다 결코 느리지 않습니다.
- Lodash는 무엇을 추가했습니까?
- 조작성 향상
- 추가 기능
- 퍼포먼스 향상
- 체인을 위한 줄임말 구문
- 필요한 것만 사용할 수 있는 커스텀 빌드
- 시멘틱 버전 관리 및 100% 코드 적용 범위
저는 결국 제게 중요한 한 가지 차이점을 발견했어요.Underscore의 Lodash_.extend()
는 클래스 레벨에서 정의된 속성 또는 메서드에 복사하지 않습니다.
CoffeeScript에서 이를 증명하는 Jasmine 테스트를 만들었습니다.
https://gist.github.com/softcraft-development/1c3964402b099893bd61
lodash.underscore.js
Underscore.js unders unders unders 。이 동작은 제 상황에서는 바람직한 동작이었습니다.
는 Lodash를 있다._.mapValues()
는 Underscore의 Underscore.js와 ._.mapObject()
.
대부분의 경우 Underscore.js는 Lodash의 서브셋입니다.
현재와 같이 Underscore.js에는 Lodash에 없는 mapObject와 같은 작고 멋진 기능이 있을 수 있습니다.이 덕분에 프로젝트 개발에 많은 시간을 절약할 수 있었습니다.
로다쉬가 인수하면서 둘 다 비슷해...
둘 다 JavaScript의 유틸리티 세계를 이용하는 유틸리티 라이브러리입니다.
Lodash는 이제 정기적으로 업데이트되고 있는 것 같습니다. 그래서 최신 프로젝트에서 더 많이 사용되고 있습니다.
또한 Lodash는 몇 KB 정도 가벼워진 것 같습니다.
둘 다 API와 문서는 좋지만, 저는 Lodash가 더 좋다고 생각합니다.
다음은 어레이의 첫 번째 값을 얻기 위한 각 문서 항목의 스크린샷입니다.
밑줄.js:
Lodash:
수시로 업데이트 될 수 있으니 웹사이트도 확인하세요...
언급URL : https://stackoverflow.com/questions/13789618/differences-between-lodash-and-underscore-js
'programing' 카테고리의 다른 글
intl-tel-input과 vuejs2의 병용 (0) | 2022.11.17 |
---|---|
MariaDB가 기동하지 않는다. (0) | 2022.11.17 |
이클립스에서 선 삭제 (0) | 2022.11.17 |
1개의 치환콜로 여러 문자를 치환하다 (0) | 2022.11.17 |
JSONDecodeError: 예상 값: 1행 1열(char 0) (0) | 2022.11.17 |