JS 성능: 항상 배열을 사용해서는 안 됩니다.

6173 단어 performancejavascript
배열에 있는 것을 찾으려고 꽤 많은 시간을 보낸 것 같습니다. 내 고양이를 찾는 데 쓰는 시간만큼!

다음을 고려하세요:

const catsArray = 
  [ {name: 'Aeris', isFavourite: true}
  , {name: 'Juri'}
  , {name: 'Dante'}
  , {name: 'Frankenstein'}
  ];

const findMyCat =
  requestedCat =>
    catsArray.find(({name}) => name === requestedCat);

findMyCat('Dante'); // {name: 'Dante'}
findMyCat('Marmalade'); // undefined


Dante를 찾고 싶습니다(실제 세계에서 흔히 발생하는 문제). 그러기 위해서는 먼저 Aeris가 Dante가 아닌지 확인해야 합니다. 그런 다음 Juri도 Dante가 아닌지 확인해야 합니다. 조금 이상하지만 괜찮습니다. 그리고 Marmalade라는 고양이가 있는지 확인하고 싶다면 먼저 모든 고양이를 확인해야 합니다. 흠.

내 데이터가 여기에서 좀 더 잘 표현될 수 있을까요?

const catsMap = new Map(
  [ ['Aeris', { name: 'Aeris', isFavourite: true }]
  , ['Juri', { name: 'Juri' }]
  , ['Dante', { name: 'Dante' }]
  , ['Frankenstein', { name: 'Frankenstein' }]
  , ['Aeris', { name: 'Aeris' }]
  ]
)

const findMyCat =
    requestedCat => catsMap.get(requestedCat)

findMyCat('Dante'); // {name: 'Dante'}
findMyCat('Marmalade'); // undefined


이제 다음에 Dante를 찾고 싶을 때, 그냥 그를 찾을 수 있습니다. 그가 있어야 할 것처럼 catsMap['Dante']에 있으면 찾을 것이고, 없으면 찾지 않을 것입니다. 하지만 도중에 다른 고양이를 보느라 시간을 낭비할 필요는 없습니다. . 내가 10,000마리의 고양이를 키울 때 이것이 가져올 차이를 상상해 보십시오. 그중 어느 것도 마멀레이드라고 불립니다. 방금 10,000(가상) 작업을 절약했습니다!

업데이트:



이 메시지를 여기에 게시하면 누군가가 더 나은 대안을 신속하게 제안할 것이라는 것을 알았으므로 지적해 주셔서 감사합니다Maps actually exist in JS now ! (나는 이것을 반영하기 위해 이 게시물의 예를 업데이트 했으므로 처음 읽는 경우 "이전"에 대해 걱정할 필요가 없습니다 :))

또한 원래 게시물에 설명된 두 가지 접근 방식의 차이점을 보여주는 다음 성능 테스트에 감사드립니다. <3

좋은 웹페이지 즐겨찾기