코드 냄새 20 - 조기 최적화

미리 계획을 세우는 데는 개발자에게는 없는 수정 구슬이 필요합니다.

TL;DR: Don't guess things that might not happen.



문제


  • 커플링
  • 테스트 가능성
  • 가독성
  • YAGNI

  • 솔루션


  • 위대하고 먼저 만드십시오.
  • 모델이 작동하면 결정적인 벤치마크를 만듭니다.
  • 프로그래머는 프로그램에서 중요하지 않은 부분의 속도에 대해 걱정하느라 막대한 시간을 낭비하며 이러한 효율성 시도는 실제로 디버깅 및 유지 관리를 고려할 때 강력한 부정적인 영향을 미칩니다. 도널드 크누스
  • Design for Performance .
  • 테스트 주도 개발 기술을 사용합니다. 항상 가장 간단한 솔루션을 선호합니다.


  • 이상한 데이터 구조
  • 캐시
  • 싱글턴

  • 샘플 코드



    잘못된




    class Person {
        ancestors() {
            cachedResults = GlobalPeopleSingletonCache.getInstance().relativesCache(this.id);
            if (cachedResults != null) {
                return (cachedResults.hashFor(this.id)).getAllParents();
            }
            return database().getAllParents(this.id);
        }
    }
    

    오른쪽



    class Person {   
      ancestors(){
         return this.mother.meAndAncerstors().concat(this.father.meAndAncerstors());      
      }
      meAndAncerstors(){
         return this.ancestors().push(this);
      }
    }
    

    발각



    이것은 디자인 냄새이므로 기계 도구로는 (아직) 감지할 수 없습니다.

    태그


  • 조기 최적화
  • 반패턴

  • 결론



    기능적 모델이 충분히 성숙해질 때까지 성능 결정을 미루십시오.

    Donald Knuth는 최고의/가장 빠른 알고리즘과 데이터 구조를 생성/컴파일했습니다. 큰 지혜로 그는 우리에게 학대에 대해 경고했습니다. 왜 우리가 그보다 똑똑하다고 생각합니까?

    처지







    더 많은 정보


  • c2 wiki
  • Wikipedia





  • 학점



    사진 제공: Markus Spiske on Unsplash


    Premature optimization is the root of all evil.



    도널드 크누스






    이 기사는 CodeSmell 시리즈의 일부입니다.




    마지막 업데이트: 2021/07/02

    좋은 웹페이지 즐겨찾기