문제

나는 매우 복잡한 JavaScript 처리가 필요한 프로젝트를 진행하고 있습니다. 여기에는 많은 중첩이 포함됩니다 if-else꽤 많은 곳에 있습니다. 나는 일반적으로 스택 오버플로에 대한 다른 팁을 읽음으로써 가능한 한 많이 자바 스크립트 코드를 최적화하는 데주의를 기울 였지만 다음 두 구성이 속도만으로도 차이를 만들지 궁금합니다.

if(some_condition) {
    // process
    return ;
}

// Continue the else condition here

vs

if(some_condition) {
    // Process
}

else {
   // The 'else' condition...
}
도움이 되었습니까?

해결책

나는 항상 첫 번째 방법으로갑니다. 읽기 쉬우 며 들여 쓰기가 적습니다. 실행 속도에 따라, 이것은 구현에 따라 다르지만 둘 다 동일 할 것으로 기대합니다.

다른 팁

많은 언어에서는 일반적인 관행입니다 거꾸로 하다 if 중첩을 줄이기위한 진술 또는 사용 전제 조건.

코드에 중첩이 적 으면 코드 가독성과 유지 관리가 향상됩니다.

"프로필, 추측하지 마세요!"

  1. 당신은 말 전에 카트를 넣는다 (인간의 유지 가능성은 기계 속도를 능가한다)
  2. 최적화 노력을 주도해야합니다 측정, 이는 의미합니다

    • 당신은 직접 실행을 시간에해야합니다. 브라우저와 버전에서는 분명히 다릅니다
    • 속도 만 최적화해야합니다 핫스팟 신청서 (지점 1 참조)

성능에는 차이가 없을 것입니다. 유지 관리에 대한 두 번째 예제를 권장합니다. 일반적으로 일상에 대한 하나의 가능한 출구 지점을 하나만 갖는 것이 좋습니다. 디버깅 및 이해력을 돕습니다.

유효하지 않은 상황을 배제 할 때 첫 번째 접근 방식을 사용하겠습니다.

예를 들어. 유효성 검사를 수행 할 때 첫 번째 접근 방식을 사용하고 유효성 검사에 실패하면 반환하십시오. 전제 조건이 실패하면 더 나아갈 필요는 없습니다. Martin Fowler가 그의 리팩토링 책. 그는 그것을 "조건을 가드 조항으로 대체한다"고 부릅니다. 그리고 코드를 쉽게 이해하기 쉽게 만들 수 있습니다.

Java 예는 다음과 같습니다.

  public void debitAccount(Account account, BigDecimal amount) {
    if(account.user == getCurrentUser()) {
      if(account.balance > amount) {
           account.balance = account.balance - amount
       } else {
          //return or throw exception
       }
    } else {
        //return or throw exception
    }
  }

vs

 public void debitAccount(Account account, BigDecimal amount) {
    if(account.user != getCurrentUser()) return //or error
    if(account.balance < amount) return //or error
    account.balance = account.balance - amount    
}

어쩌면 약간 있지만 나머지 기능이 "무거운"과 관련이 없다면 측정 가능할 것이라고 생각하지 않습니다 (그리고 반품이 동일한 결과를 제공한다고 가정하기 때문에 중복됩니다) JS 호출.

참고로, 이것이 불필요한 마이크로 최적화라고 생각하며, 성능 향상을 위해 다른 곳을 찾아야 할 것입니다. 즉, Chrome의 개발자 도구 또는 Firefox (또는 유사한 도구)를 통해 스크립트를 프로파일하고 느리게/긴 통화/기능을 찾습니다. .

실행중인 브라우저의 JavaScript 구현에 의존하지만 속도 측면에서 주목할만한 차이는 없어야합니다.

흐름을 깨는 것이 좋은 프로그래밍 습관이 아니기 때문에 두 번째 형태는 바람직합니다. 또한 어셈블리에서 점프 명령 (마이크로 작동)은 평가에 관계없이 항상 평가됩니다.

직접 테스트하십시오. 이 JavaScript가 브라우저에서 실행되는 경우 브라우저의 JavaScript 구문 분석 엔진에 거의 확실하게 의존합니다.

내 이해는 IF 조건을 분기하기 때문에 차이가 없다는 것입니다. 따라서 일부 _condition이 사실이라면 반품 없이도 다른 부분은 건드리지 않습니다.

생각해보십시오 return 1ms 대 중첩을 사용합니다 if 0.1ms (또는 그 반대)를 복용합니다.

어느 쪽이든 거의 느리게 상상하기가 어렵습니다.

이제 초당 100 회 이상하고 있습니까?

그렇다면, 아마도 당신은 관심을 가져야합니다.

단 하나만있을 때 if..else 성능은 거의 동일합니다 그리고 그것은 중요하지 않습니다. 귀하의 경우 가장 잘 읽을 수있는 것을 사용하십시오. 그러나 사용한 중첩 된 진술로 오는 것 return 입니다 대부분의 성능 비교 if...else 그리고 case switch

내 경험에서 이야기하는 것은 당신이 확인하는 상태에 달려 있습니다.

  1. if .. return 부울 조건 (아마도 설정)을 확인하면 다음 코드 전체를 전혀 실행할 필요가없는 부울 조건 (설정)을 확인하면 읽기 쉽습니다.

  2. if .. else 일부 값이 가능한 두 가지 (또는 그 이상) 값 중 하나이며 두 경우 모두 다른 코드를 실행하려는 경우 읽기가 훨씬 쉽습니다. 두 가지 가능한 값은 동일한 해석 가능한 값의 조건을 나타내므로 동일한 논리적 수준으로 작성해야합니다.

내 생각에, 반환과 그렇지 않으면 위의 경우에는 동일하지만 일반적으로 if-else 그리고 if()return; 매우 다릅니다. 현재의 범위에서 상위 범위로 이동하려면 반환 문을 사용할 수 있습니다. if-else 동일한 범위에서 추가 IF-ELSE를 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top