Chrome 프로파일 러의 '최적화되지 않음'경고는 무엇을 의미하나요?
Chrome에서 개발자 도구를 사용하여 JavaScript CPU 프로필을 수집 할 때 함수에 대한 두 가지 신비한 경고가 표시됩니다.
- 최적화되지 않음 : 너무 많이 최적화 됨
- 최적화되지 않음 : 인라인 구제 됨
이것이 실제로 무엇을 의미합니까? 가능한 해결책은 무엇입니까?
내가 본 또 다른 것은 최적화되지 않음 : TryCatchStatement 이지만 의미가 있습니다. 해결책은 try-catch를 제거하는 것입니다.
지금까지 찾은 설명에서 가장 가까운 시도는 이것이었습니다-https: //github.com/GoogleChrome/devtools-docs/issues/53
"최적화되지 않음 : 너무 많이 최적화 됨"은 크롬 옵티마이 저가 함수를 계속 재 최적화하는 경우를 말합니다.
https://groups.google.com/forum/#!topic/v8-users/_oZ4fUSitRY
올바르게 기억하면 유형을 변경하는 매개 변수를 포함하여이를 유발할 수있는 여러 가지가 있습니다. 링크를 파헤쳐 보겠습니다.
이것은 다소 비밀스럽고 수정 사항은 코드에 따라 다릅니다. 내 코드에이 팝업이 여러 번 표시되었으며 때로는 수정할 수 없습니다.
'최적화되지 않음 : 인라인 구제 됨'게시 한 링크에서 답변 한 것 같습니다.
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 플래그를 활성화하면 정확히 파악하는 데 도움이됩니다.
의견에 제공된 링크가 이미 당신을 지적했다면 변명합니다.
'최적화되지 않음 : 너무 많이 최적화 됨'경고를 많이 받았는데 이러한 기능이 예상보다 훨씬 느리게 실행되었습니다.
다음을 수행하여 이러한 기능을 수정할 수있었습니다.
사용하지 않는 변수 선언 제거
여러 번 반복되는 루프에서 함수 호출 제거 (> 1000 의심)
'code' 카테고리의 다른 글
range (len (a))가 필요합니까? (0) | 2020.12.02 |
---|---|
Boost를 사용하여 C ++ 14 스타일 자동 반환 유형을 달성하려면 어떻게해야합니까? (0) | 2020.12.02 |
사용자가 로그인 한 후 Laravel 5 세션이 지속되지 않음 (0) | 2020.12.02 |
모든 Android 기기를 지원하려면 14 가지 레이아웃이 필요합니까? (0) | 2020.12.02 |
강화 학습으로 신경망 훈련 (0) | 2020.12.02 |