programing

자바스크립트 효율성: 'for' vs 'for each'

newstyles 2023. 10. 16. 21:39

자바스크립트 효율성: 'for' vs 'for each'

2017년 현재 자바스크립트에서 ()루프 대 각각에 대한 a.로 현재 표준은 무엇입니까?

에 있는 를 , 는 "" 를합니다를 합니다.forEach 이상for그의 가르침 는 코스 으로 연습 기간 그러나 나는 코스 작업의 일환으로 연습 중에 다양한 것들을 검색했고 점점 더 많은 권장 사항들을 발견했습니다를 사용할 수 있는 을 점점 더 했습니다.for -forEach가 더 것 대부분의 사람들은 포루프가 더 효율적이라고 말하는 것 같습니다.

이것은 코스가 작성된 이후(2015년경) 달라진 것입니까, 아니면 각각의 장단점입니까, 더 많은 경험을 통해 배울 것입니다.

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

위해서

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

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

이것은 포루프가 항상 더 효율적일 것이라는 것을 암시하는 것이 아니라, 단지 JS 엔진과 브라우저가 그렇게 하도록 최적화했다는 것입니다.수년에 걸쳐 루프 구성이 더 효율적인지(축소, 역방향 등)에 대한 타협이 있었습니다. 서로 다른 브라우저와 JS 엔진은 동일한 결과를 도출하기 위해 서로 다른 방법론을 제공하는 자체 구현을 가지고 있습니다.이론적으로 브라우저가 성능 요구에 맞게 더욱 최적화됨에 따라[].forEach다이와 해 더될 수 .for.

이점:

  • 능률적인
  • ()break그리고.continue)
  • ()i<n배열 크기에 구속되지 않고 무엇이든 가능)
  • 지정()var ii루프 종료 후 사용 가능)

에 대하여

.forEach는 주로 배열을 반복하는 메소드입니다. (또한 다음과 같은 다른 열거 가능한 메소드에도 해당됩니다.)Map그리고.Set(객체)그들은 더 새롭고 주관적으로 읽기 쉬운 코드를 제공합니다.예:

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

이점:

  • 변수 설정을 포함하지 않음(배열의 각 요소에서 반복)
  • functions/arrow-functions가 변수를 블록까지 범위 지정
    위의 예에서,val새로 생성된 함수의 매개 변수가 될 것입니다.따라서, 다음과 같은 변수는val루프가 종료되기 전에, 그들의 값을 유지할 것입니다.
  • 코드가 무엇을 하고 있는지 식별하는 것이 더 쉬울 수 있기 때문에 주관적으로 더 유지보수가 가능합니다. 열거자를 반복하는 반면, for-loop은 어떤 수의 루프 방식에도 사용될 수 있습니다.

성능

성과는 까다로운 주제이며, 이는 일반적으로 사전에 생각하거나 접근할 때 어느 정도의 경험을 필요로 합니다.최적화가 얼마나 필요한지를 (개발하는 동안) 미리 결정하기 위해서는 프로그래머가 문제 사례에 대한 과거의 경험과 잠재적 해결책을 잘 이해하고 있어야 합니다.

어떤 경우에는 jQuery를 사용하는 것이 너무 느릴 수도 있지만(경험이 많은 개발자는 이를 알 수도 있음), 어떤 경우에는 문제가 되지 않을 수도 있습니다. 이 경우 라이브러리의 크로스 브라우저 컴플라이언스 및 다른 기능(예: AJAX, 이벤트 처리) 수행의 용이성이 개발(및 유지보수) 시간을 절약할 가치가 있습니다.

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

접근

최적화된 코드가 필요한지 잘 이해하지 못하면 유지보수 가능한 코드를 먼저 작성하는 것이 일반적인 경험칙입니다.이를 통해 더 많은 주의가 필요한 부분을 테스트하고 정확하게 파악할 수 있습니다.

즉, 특정한 명백한 최적화는 일반적인 관행의 일부여야 하며 어떤 생각도 필요하지 않습니다.예를 들어, 다음 루프를 생각해 보겠습니다.

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

각 인 를 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