제4 장 - 알고리즘 과 절차 제어

3191 단어
코드 의 많 고 적 음 은 운행 속도 와 밀접 한 관계 가 없다.코드 운행 속도 에 영향 을 주 는 주요 요 소 는 코드 의 조직 구조 와 문 제 를 해결 하 는 구체 적 인 사고 이다.
순환 하 다.
대부분의 프로 그래 밍 언어 에서 코드 실행 시간 은 대부분 순환 에 소모 된다.순환 은 가장 흔히 볼 수 있 는 프로 그래 밍 모델 중 하나 이자 성능 향상 에 관심 을 가 져 야 할 요점 중 하나 이다.
순환 유형
자 바스 크 립 트 에는 네 가지 순환 유형 이 있 습 니 다.
  • 표준 for 순환:
  • for (var i=0; i < 5; i++) {
        // do sth
    }
    

    for 순환 은 자 바스 크 립 트 에서 가장 자주 사용 하 는 순환 구조 입 니 다.그것 은 네 부분 으로 구성 되 어 있 습 니 다. 초기 화, 테스트 조건, 후 실행 체, 순환 체 입 니 다.코드 가 for 순환 을 만난 후에 초기 화 코드 를 실행 한 다음 에 테스트 조건 에 들 어 갑 니 다.전 측 조건 이 true 라면 순환 체 를 실행 합 니 다.순환 체 가 실 행 된 후 실행 코드 가 실 행 됩 니 다.
  • while 순환
  • var i = 0;
    while(i < 10) {
        // do sth
        i++;
    }
    

    while 순환 은 하나의 전 측 조건 과 하나의 순환 체 로 구성 된다.순환 체 가 운행 하기 전에 먼저 측정 조건 을 계산한다.계산 결과 가 true 이면 순환 체 를 실행 합 니 다.모든 for 순환 은 while 순환 으로 바 꿀 수 있 습 니 다.
  • do - while 순환 do - while 순환 은 JavaScript 에서 유일한 후 측 순환 이다.그것 은 순환 체 와 후 측 조건 으로 구성 되 어 있다.
  • var i = 0;
    do {
        //    
    } while (i++ < 10)
    

    do - while 순환 에서 순환 체험 은 적어도 한 번 은 실 행 됩 니 다.그리고 재 집행 여 부 는 재 측정 조건 에 의 해 결정 된다.
  • for - in 순환 for - in 순환 은 임의의 대상 의 이름 을 매 거 할 수 있 습 니 다.
  • for (var prop in object) {
        // do sth
    }
    

    순환 체 가 실 행 될 때마다 prop 변 수 는 object 의 속성 명 으로 할당 되 어 모든 속성 이 다 옮 겨 다 닐 때 까지 되 돌 아 옵 니 다.대상 이 원형 체인 에서 물 려 받 은 속성 을 포함 합 니 다.
    순환 성능
    상기 네 가지 순환 유형 중에서 for - in 만 순환 이 현저히 느리다.
    매번 교체 작업 은 인 스 턴 스 나 원형 속성 을 동시에 검색 하기 때문에 for - in 순환 의 매번 교체 에 더 많은 비용 이 발생 합 니 다.같은 횟수 의 순환 에 비해 for - in 순환 은 최종 적 으로 다른 유형의 속도 의 1 / 7 에 불과 합 니 다.따라서 속성 수량 이 알 수 없 는 대상 을 교체 해 야 한 다 는 것 이 명확 하지 않 으 면 for - in 을 사용 하 는 것 을 피해 야 합 니 다.
    만약 순환 유형 이 성능 과 무관 하 다 면 다음 두 가지 에서 출발 하여 최적화 할 수 있다.
  • 매번 교체 처리 하 는 사물
  • 교체 횟수
  • 교체 작업량 을 줄이다.
    순환 의 전체 속 도 를 높이 는 좋 은 방법 은 매번 순환 에 걸 리 는 작업 의 수량 을 제한 하 는 것 이다. 먼저 예시 코드 를 보 자.
    //         
    for (var i=0; i < items.length; i++) {
        //       
        process(items[i])
    }
    

    위의 이 예시 에서 매번 순환 을 실행 할 때마다 해 야 할 일 은 다음 과 같다.
  • 제어 조건 에서 속성 찾기 (items. length)
  • 제어 조건 에서 비교 (i < items. length)
  • 제어 조건 의 결과 가 true 인지 확인 하기
  • 1 차 자체 증가 작업 (i + +)
  • 한 배열 찾기 (items [i])
  • 1 차 함수 호출
  • 코드 의 실행 속 도 는 어느 정도 함수 호출 프로 세 스 () 에 달 려 있다.시간 이 걸 립 니 다. 그러나 매번 반복 되 는 작업 횟수 가 적 으 면 순환 성능 을 어느 정도 향상 시 킬 수 있 습 니 다. 순환 을 최적화 하 는 첫 번 째 단 계 는 대상 구성원 과 배열 항목 의 검색 횟수 를 줄 이 는 것 입 니 다. 앞의 예 에서 순환 할 때마다 items. length 를 찾 아야 합 니 다. 이 작업 은 시간 이 많이 걸 립 니 다. 이 값 이 실행 중 에 변 하지 않 았 기 때문에 부분 변수 에 저장 할 수 있 습 니 다. 그리고제어 조건 에서 이 변 수 를 사용 합 니 다:
    //        
    for (var i=0, len=items.length; i < len; i++) {
        process(items[i])
    }
    

    위의 최 적 화 를 거 친 후, 배열 의 길이 에 따라 대부분의 브 라 우 저 에서 25% 의 시간 을 절약 할 수 있 으 며, 역순 순환 을 통 해 순환 성능 을 향상 시 킬 수 있다.
    //          
    for (var i=items.length; i--; ) {
        process(items[i])
    }
    

    위의 예제 에 서 는 역순 순환 을 사용 하고 감법 작업 을 제어 조건 에 넣 었 습 니 다. 현재 모든 제어 조건 은 간단 한 것 과 0 을 비교 할 뿐 입 니 다. 제어 조건 은 두 번 의 비교 (반복 대수 가 총수 보다 적 습 니까? 그것 은 true 입 니까?) 에서 한 번 의 비교 (true 입 니까?) 로 줄 어 들 었 습 니 다.
    위의 두 가지 최 적 화 를 거 친 후에 실행 속 도 는 원본 버 전보 다 약 50% - 60% 빨 라 졌 다.
    미완이다.

    좋은 웹페이지 즐겨찾기