code

Chrome 프로파일 러의 '최적화되지 않음'경고는 무엇을 의미하나요?

codestyles 2020. 12. 2. 21:23
반응형

Chrome 프로파일 러의 '최적화되지 않음'경고는 무엇을 의미하나요?


Chrome에서 개발자 도구를 사용하여 JavaScript CPU 프로필을 수집 할 때 함수에 대한 두 가지 신비한 경고가 표시됩니다.

  • 최적화되지 않음 : 너무 많이 최적화 됨
  • 최적화되지 않음 : 인라인 구제 됨

이것이 실제로 무엇을 의미합니까? 가능한 해결책은 무엇입니까?

내가 본 또 다른 것은 최적화되지 않음 : TryCatchStatement 이지만 의미가 있습니다. 해결책은 try-catch를 제거하는 것입니다.

지금까지 찾은 설명에서 가장 가까운 시도는 이것이었습니다-https: //github.com/GoogleChrome/devtools-docs/issues/53


  1. "최적화되지 않음 : 너무 많이 최적화 됨"은 크롬 옵티마이 저가 함수를 계속 재 최적화하는 경우를 말합니다.

    https://groups.google.com/forum/#!topic/v8-users/_oZ4fUSitRY

    올바르게 기억하면 유형을 변경하는 매개 변수를 포함하여이를 유발할 수있는 여러 가지가 있습니다. 링크를 파헤쳐 보겠습니다.

    이것은 다소 비밀스럽고 수정 사항은 코드에 따라 다릅니다. 내 코드에이 팝업이 여러 번 표시되었으며 때로는 수정할 수 없습니다.

  2. '최적화되지 않음 : 인라인 구제 됨'게시 한 링크에서 답변 한 것 같습니다.

  3. try / catch의 경우,이 github 페이지에서 크롬 최적화 특성에 대한 제한적이지 않지만 유용한 목록을 찾을 수 있습니다.

    https://github.com/petkaantonov/bluebird/wiki/Optimization-killers

    이 페이지에서는 try / catches가 현재 최적화되어 있지 않다고 언급합니다.

    • 발전기 기능
    • for-of 문을 포함하는 함수
    • try-catch 문을 포함하는 함수
    • try-finally 문을 포함하는 함수
    • 복합 렛 할당을 포함하는 함수
    • 복합 const 할당을 포함하는 함수
    • proto 를 포함하는 객체 리터럴을 포함하는 함수 또는 선언을 가져 오거나 설정합니다.

이러한 구제 금융 이유에 대한 설명은 크라우드 소싱되고이 github 스레드에 문서화되어 있습니다. https://github.com/GoogleChrome/devtools-docs/issues/53

간단한 설명 : V8은 일부 구조를 사용하여 기능을 최적화하지 않습니다. try / catch 블록이 한 예입니다. 전체 목록은 엔진이 발전함에 따라 시간이 지남에 따라 변경 될 수 있습니다. 또한 최적화를 시도한 다음 일부 핫 함수를 너무 많이 최적화 해제해야하는 경우 포기할 수 있습니다 (예 : 함수가 실행될 때마다 유형 피드백이 다르기 때문).


나는

function generate_year_blob(year,action,callback){ ... do_blob({act: action, cb:callback, ...}) ... }

그리고 나는 항상 이와 같은 하나의 매개 변수를 사용하여 호출했습니다 generate_year_blob(this_year).

사람들은 action과 (문자열을 것으로 예상) callback에 전달 된 (기능을 것으로 예상) do_blob()기능.

호출을에서 generate_year_blob(this_year)변경했을 때 generate_year_blob(this_year,'',null)' 최적화되지 않음 : 너무 많이 최적화 됨 '경고가 사라졌습니다.

많은 유사한 기능 있었기 때문에 나는 즉시이를 찾을 수 없습니다 generate_month_blob(...), generate_day_blob(...)정의 된 모든 매개 변수로 불렸다 등.


첫 번째는 엔진이 최적화했기 때문일 수 있지만 어떤 이유로 최적화가 좋지 않다는 것을 발견했습니다 (반환 유형이 시간에 따라 달라질 수 있음).

--trace-opt 및 --trace-deopt 플래그를 활성화하면 정확히 파악하는 데 도움이됩니다.

의견에 제공된 링크가 이미 당신을 지적했다면 변명합니다.


'최적화되지 않음 : 너무 많이 최적화 됨'경고를 많이 받았는데 이러한 기능이 예상보다 훨씬 느리게 실행되었습니다.

다음을 수행하여 이러한 기능을 수정할 수있었습니다.

  1. 사용하지 않는 변수 선언 제거

  2. 여러 번 반복되는 루프에서 함수 호출 제거 ​​(> 1000 의심)

참고 URL : https://stackoverflow.com/questions/22509262/what-do-the-not-optimized-warnings-in-the-chrome-profiler-mean

반응형