developer tip

자바 스크립트 효율성 : 'for'대 'forEach'

copycodes 2020. 10. 14. 07:56
반응형

자바 스크립트 효율성 : 'for'대 'forEach'


for () 루프와 .forEach가있는 Javascript의 2017 년 현재 표준은 무엇입니까?

나는 현재 Udemy에 콜트 제철 "웹 데브 부트 캠프"를 통해 내 방식대로하고 있어요 그는 호의 forEach를 통해 for그의 가르침에. 나는, 그러나, 물론 작업의 일환으로 운동을하는 동안 여러 가지 검색하고 난 점점 더 많은 권고 용도 찾을 for보다는 -loop을 forEach. 대부분의 사람들은 for 루프가 더 효율적이라고 말하는 것 같습니다.

이것은 코스가 작성된 이후 (2015 년경) 변경된 것입니까, 아니면 각각에 대한 장단점이며 더 많은 경험을 통해 배울 것입니다.

어떤 조언이라도 대단히 감사하겠습니다.


...에 대한

for루프가 훨씬 더 효율적입니다. 조건이 true동안 반복하도록 특별히 설계된 반복 구조이며 동시에 스테핑 메커니즘을 제공합니다 (일반적으로 반복자를 증가시키기 위해). 예:

for (var i=0, n=arr.length; i < n; ++i ) {
   ...
}

이것은 for 루프가 항상 더 효율적이라는 것을 암시하는 것이 아니라 JS 엔진과 브라우저가이를 최적화했기 때문입니다. 수년 동안 어떤 루프 구조가 더 효율적인지 (for, while, reduce, reverse-while 등)에 대한 타협이있었습니다. 다른 브라우저와 JS 엔진은 동일한 결과를 생성하는 다른 방법론을 제공하는 자체 구현을 가지고 있습니다. 브라우저가 성능 요구 사항을 충족하기 위해 더욱 최적화됨에 따라 이론적으로 [].forEach는 더 빠르거나 for.

혜택:

  • 실력 있는
  • 조기 루프 종료 (명예 breakcontinue)
  • 조건 제어 ( i<n무엇이든 가능하며 배열의 크기에 바인딩되지 않음)
  • 변수 범위 지정 ( var ii루프 종료 후 가능)

각각

.forEach주로 배열 ( MapSet객체 와 같은 다른 열거 가능)을 반복하는 메서드입니다 . 그들은 더 새롭고 주관적으로 읽기 쉬운 코드를 제공합니다. 예:

[].forEach((val, index)=>{
   ...
});

혜택:

  • 변수 설정을 포함하지 않음 (배열의 각 요소에 대해 반복)
  • functions / arrow-functions는 변수를 블록으로 범위 지정합니다.
    위의 예 val에서 새로 생성 된 함수의 매개 변수가됩니다. 따라서 val루프 이전에 호출 된 모든 변수는 종료 후 해당 값을 보유합니다.
  • 코드가 수행하는 작업을 식별하는 것이 더 쉬울 수 있으므로 주관적으로 유지 관리가 더 쉽습니다.-열거 형을 반복합니다. for 루프는 여러 루핑 체계에 사용할 수 있습니다.

공연

성능은 까다로운 주제이며 일반적으로 미리 생각하거나 접근 할 때 약간의 경험이 필요합니다. 얼마나 많은 최적화가 필요할 수 있는지 미리 결정하기 위해 (개발하는 동안) 프로그래머는 문제 사례에 대한 과거 경험과 잠재적 솔루션에 대한 좋은 이해를 가지고 있어야합니다.

어떤 경우에는 jQuery를 사용하는 것이 너무 느릴 수 있지만 (숙련 된 개발자는이를 알고있을 수 있음) 다른 경우에는 문제가되지 않을 수 있습니다.이 경우 라이브러리의 브라우저 간 호환성 및 다른 기능 (예 : AJAX, 이벤트 처리)는 개발 (및 유지 관리) 시간을 절약 할 가치가 있습니다.

또 다른 예는 성능과 최적화가 전부라면 기계 나 어셈블리 외에 다른 코드가 없다는 것입니다. 각각 고유 한 장단점이있는 다양한 고수준 및 저수준 언어가 있기 때문에 분명히 그렇지 않습니다. 이러한 트레이드 오프에는 전문화, 개발 용이성 및 속도, 유지 보수 용이성 및 속도, 최적화 된 코드, 오류없는 코드 등이 포함되며 이에 국한되지 않습니다.

접근하다

최적화 된 코드가 필요한지 잘 이해하지 못한 경우 일반적으로 유지 관리 가능한 코드를 먼저 작성하는 것이 좋습니다. 거기에서 필요할 때 더 많은주의가 필요한 항목을 테스트하고 정확히 찾아 낼 수 있습니다.

즉, 특정 명백한 최적화는 일반적인 관행의 일부 여야하며 생각할 필요가 없습니다. 예를 들어, 다음 루프를 고려하십시오.

for (var i=0; i < arr.length; ++i ){}

루프의 각 반복에 대해 JavaScript는 arr.length각주기의 키 조회 비용 계산 작업 인을 검색합니다. 이것이 안되는 이유가 없습니다.

for (var i=0, n=arr.length; i < n; ++i){}

동일한 작업을 수행하지만 arr.length한 번만 검색 하여 변수를 캐싱하고 코드를 최적화합니다.

참고 URL : https://stackoverflow.com/questions/43031988/javascript-efficiency-for-vs-foreach

반응형