>웹 프론트엔드 >H5 튜토리얼 >Anglejs에서 메모리 오버플로를 처리하는 방법

Anglejs에서 메모리 오버플로를 처리하는 방법

php中世界最好的语言
php中世界最好的语言원래의
2018-03-27 17:44:002549검색

이번에는 angularjs에서 메모리 오버플로를 처리하는 방법과 Angularjs 메모리 오버플로를 처리할 때 어떤 주의사항이 있는지 알려드리겠습니다. 실제 사례를 살펴보겠습니다.

이번에는Angularjs의 메모리 오버플로를 처리하는 방법을 설명하고,Angularjs의 메모리 오버플로를 처리할 때 주의 사항은 무엇입니까?다음은 실제 사례입니다.

70% building modules 1345/1345 modules 0 active
<--- Last few GCs --->
ms: Mark-sweep 703.9 (837.9) -> 701.4 (811.9) MB, 331.3 / 0 ms [allocation failure] [GC in old space requested].
ms: Mark-sweep 701.4 (811.9) -> 701.4 (790.9) MB, 350.5 / 0 ms [allocation failure] [GC in old space requested].
ms: Mark-sweep 701.4 (790.9) -> 698.0 (760.9) MB, 433.7 / 0 ms [last resort gc].
ms: Mark-sweep 698.0 (760.9) -> 692.7 (751.9) MB, 328.7 / 0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 00000298510373A9 <JS Object>
  1: /* anonymous */(aka /* anonymous */) [D:\dev\cobalt_wp\node_modules\webpack\lib\FlagDependencyExportsPlugin.js:77] [pc=0000026F721B51D6] (this=0000029851004131 <undefined>,dep=00000150FC6162C9 <a NormalModule with map 0000025741730C01>)
  2: arguments adaptor frame: 3->1
  3: InnerArrayForEach(aka InnerArrayForEach) [native array.js:~924] [pc=0000026F71EE3DCD] (this=000002985100413...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory

참고: 여기에 있는 코드는 실제 오류 코드가 아닙니다. 컴파일하는 데 너무 오래 걸려서 가로채는 것을 잊어버렸습니다. 동일한 문제가 발생하면 답을 찾을 수 있습니다.

당시에는 컴파일이 잘 되던데요 왜 갑자기 오버플로가 발생하는 걸까요?

가능한 원인은 다음과 같습니다.

1.Angular4는 상대적으로 CPU와 메모리를 많이 요구합니다. 파일 수가 많은 경우 메모리가 부족할 수 있습니다(가능).

2. 코드에 대용량 루프나 무한 루프가 있는 경우(서버 단계에서는 오버플로가 발생하지 않습니다. 확률이 높으면 안됨)

3. ngOnDestroy 단계에서 Angular가 구독한 데이터가 소멸되지 않아 메모리를 많이 차지하게 됩니다(아마도)

아직 구체적인 원인은 밝혀지지 않았습니다. 알려주세요, 감사합니다!

해결 이 문제의 과정은 매우 우여곡절이 많기 때문에 여기서는 다루지 않겠습니다. 해결책:

핵심 아이디어는 v8 엔진의 이전 속성: --max_old_space_size를 사용하여 온라인으로 메모리를 수정하는 것입니다. 속성이 설정되는 곳마다 짜증나는 작은 고블린이 됩니다!

디렉토리 수정 : my-project/node_modules/.bin ng.cmd 찾기:

@IF EXIST "%~dp0\node.exe" (
 "%~dp0\node.exe" --max_old_space_size=8192 "%~dp0\..\._@angular_cli@1.0.0@@angular\cli\bin\ng" %*
) ELSE (
 @SETLOCAL
 @SET PATHEXT=%PATHEXT:;.JS;=;%
 node --max_old_space_size=8192 "%~dp0\..\._@angular_cli@1.0.0@@angular\cli\bin\ng" %*
)

디렉터리 수정: my-project/node_modules/.bin ngc.cmd 찾기 :

@IF EXIST "%~dp0\node.exe" (
 "%~dp0\node.exe" --max_old_space_size=8192 "%~dp0\..\._@angular_compiler-cli@4.0.1@@angular\compiler-cli\src\main.js" %*
) ELSE (
 @SETLOCAL
 @SET PATHEXT=%PATHEXT:;.JS;=;%
 node --max_old_space_size=8192 "%~dp0\..\._@angular_compiler-cli@4.0.1@@angular\compiler-cli\src\main.js" %*
)

안에 --max_old_space_size 설정을 보셨나요? 숫자는 직접 정하시면 됩니다. 제 프로젝트는 상대적으로 크기 때문에 사고 방지를 위해 더 큰 값을 설정했어요 ㅎㅎ

그럼 ng build --prod 를 실행하면 이 정도면 충분하다고 생각하시나요?

제가 직접 테스트해본 결과 위와 같이 설정했는데, 다시 컴파일을 해도 여전히 메모리 오버플로가 발생하는 것 같습니다. 현재 디렉터리를 my -project/node_modules/로 전환해 보세요. bin을 실행한 다음 ng build --prod를 실행하면 세상이 갑자기 평화로워질 것입니다! 제가 직접 테스트해 보았는데 잘 작동합니다. 보관해 주셔서 감사합니다.

궁금하다면 --aot를 추가해 보세요. 이것 하나만 남겨두세요. 먼저 스스로 생각해 보세요!

자, 바쁜 시간을 내어 이 큰 구멍을 채우는 방법을 공유해 보세요. 모두에게 도움이 되기를 바랍니다!

당신이 마스터했다고 믿습니다. 이 글의 사례를 읽어보신 후, php 중국어 홈페이지기타관련 기사에 주목해주세요!

추천 자료:

vue2.0은 스와이프를 사용하여 캐러셀 광고를 구현합니다.

vue에서 모바일 스크롤을 구현하는 방법

위 내용은 Anglejs에서 메모리 오버플로를 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.