자바스크립트 효율성: '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 i
i
루프 종료 후 사용 가능)
에 대하여
.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
'programing' 카테고리의 다른 글
상수 함수에 대한 포인터의 의미는 무엇입니까? (0) | 2023.10.21 |
---|---|
jQuery 또는 자바스크립트만으로 버튼을 다른 페이지로 리디렉션하는 방법 (0) | 2023.10.16 |
Angular가 실행하려면 웹 서버가 필요합니까?그래서 브라우저에 로컬 파일의 url을 지정하면 Angular가 작동합니까? (0) | 2023.10.16 |
카운트 및 그룹별 MySQL 쿼리 (0) | 2023.10.16 |
사용자 지정 셸에서 Windows용 GitHub과 함께 제공되는 posh-git을 사용하는 방법은 무엇입니까? (0) | 2023.10.16 |