...에 대한
for
루프가 훨씬 더 효율적입니다. 조건이 true 인 동안 반복하도록 특별히 설계된 반복 구조이며 동시에 스테핑 메커니즘을 제공합니다 (일반적으로 반복자를 증가시키기 위해). 예:
for (var i=0, n=arr.length; i < n; ++i ) {
...
}
이것은 for 루프가 항상 더 효율적이라는 것을 암시하는 것은 아닙니다 . 단지 JS 엔진과 브라우저가이를 최적화했기 때문입니다. 수년에 걸쳐 어떤 루핑 구조가 더 효율적인지 (for, while, reduce, reverse-while 등)에 대한 타협이있었습니다. 다른 브라우저와 JS 엔진은 동일한 결과를 생성하는 다른 방법론을 제공하는 자체 구현을 가지고 있습니다. 브라우저가 성능 요구 사항을 충족하기 위해 더욱 최적화됨에 따라 이론적으로 [].forEach
더 빠르거나 for
.
혜택:
- 실력 있는
- 조기 루프 종료 (명예
break
및 continue
)
- 조건 제어 (
i<n
무엇이든 가능하며 배열의 크기에 바인딩되지 않음)
- 변수 범위 지정 (
var i
잎 i
루프 종료 후 가능)
각각
.forEach
주로 배열 ( Map
및 Set
객체 와 같은 다른 열거 가능)을 반복하는 메서드입니다 . 그들은 더 새롭고 주관적으로 읽기 쉬운 코드를 제공합니다. 예:
[].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
한 번만 검색 하여 변수를 캐싱하고 코드를 최적화합니다.