성능에 차이가 있습니까? 어느 것이 가장 깊은 비교를 할 수 있습니까? 각도의 등가 함수가 모든 차이를 찾을 수없는 경우가 있습니다.angular.equals와 _.isEqual의 차이점은 무엇입니까?
이 함수의 각진 버전은 '$$ hashKey'키를 확인하지 않습니다.
성능에 차이가 있습니까? 어느 것이 가장 깊은 비교를 할 수 있습니까? 각도의 등가 함수가 모든 차이를 찾을 수없는 경우가 있습니다.angular.equals와 _.isEqual의 차이점은 무엇입니까?
이 함수의 각진 버전은 '$$ hashKey'키를 확인하지 않습니다.
기본적으로 값 자체와 모든 내부 속성을 비교하여 동일하게 작동합니다. 성능도 거의 동일합니다. 적어도 10000 개의 요소에 대해 100-200 ms의 차이가 있습니다. 작은 테스트 스위트를 만들었습니다. 경고 : 코드 스 니펫을 실행할 때 브라우저 페이지가 몇 초 동결됩니다. 나는 성능을 측정하는 올바른 방법이 아니므로 더 나은 방법을 제안하는 것이 자유 롭다.
angular
.module("comparsion", [])
.controller("ComparsionCtrl", function($scope) {
var testCases = 10000;
console.time("underscore");
for(var i = 0; i < testCases; i++) {
var obj = createRandomObj(5, true);
var obj1 = createRandomObj(5, true);
_.isEqual(obj, obj1);
}
console.timeEnd("underscore");
console.time("angular");
for(var i = 0; i < testCases; i++) {
var obj = createRandomObj(5, true);
var obj1 = createRandomObj(5, true);
angular.equals(obj, obj1);
}
console.timeEnd("angular");
// Random object generator from http://stackoverflow.com/questions/2443901/random-object-generator-in-javascript
function createRandomObj(fieldCount, allowNested)
{
var generatedObj = {};
for(var i = 0; i < fieldCount; i++) {
var generatedObjField;
switch(randomInt(allowNested ? 6 : 5)) {
case 0:
generatedObjField = randomInt(1000);
break;
case 1:
generatedObjField = Math.random();
break;
case 2:
generatedObjField = Math.random() < 0.5 ? true : false;
break;
case 3:
generatedObjField = randomString(randomInt(4) + 4);
break;
case 4:
generatedObjField = null;
break;
case 5:
generatedObjField = createRandomObj(fieldCount, allowNested);
break;
}
generatedObj[randomString(8)] = generatedObjField;
}
return generatedObj;
}
// helper functions
function randomInt(rightBound)
{
return Math.floor(Math.random() * rightBound);
}
function randomString(size)
{
var alphaChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var generatedString = '';
for(var i = 0; i < size; i++) {
generatedString += alphaChars[randomInt(alphaChars.length)];
}
return generatedString;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js"></script>
<div ng-app="comparsion">
<div ng-controller="ComparsionCtrl"></div>
</div>
angular.equals : 이것은 angular equals 비교입니다.
_.isEqual : 이것은 밑줄과 같은 기능입니다.이 태그를 사용하려면 먼저 밑줄 j를 가져와야합니다.
그리고 $$ hashkey이 나타나는 경우 어떤 일이 일어날까요? –
오, 마지막 업데이트를 알지 못했습니다. 이 경우에는'unexderscore.isEqual'가'$$ hashkey' 비교를 실패하기 때문에 정확하게 'angular.equals'를 사용할 것입니다. 또는'angular.toJson' 함수를 사용하여'$$ hashkey'와 같은 내부 요소를 제거 할 수 있습니다. –
질문을 업데이트하기 전에 downvoted가 발생했습니다. 사람들이'_.isEqual vs angular.equals '@ Ashokreddy의 대답에서 볼 수 있듯이 성능에 대한 질문도있었습니다. downvotes을 방지하기 위해 가장 중요한 것들을 먼저 지적하십시오. –