angular4 JavaScript内存溢出问题


Posted in Javascript onMarch 06, 2018

最近在写基于angular4的项目的时候,在build --prod的时候,突然措手不及的蹦出个报错,大致错误如下:

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.当代码出现大量大数据的循环或者死循环(sever阶段并没有出现溢出,这个概率应该不大);

3.angular订阅的数据在 ngOnDestroy 阶段没有被销毁,造成大量数据占用内存(有可能)

目前没有查到具体是什么原因造成的,哪位大神知道的,请不吝赐教,谢谢!

解决这个问题的过程很波折,这里就不说了,你们估计也不想知道,下面说一下解决方案吧:

核心思路是运用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 , 这个就留个你自己先想想吧!

好了,忙里抽闲,分享一下这个大坑的填坑方法, 希望对大家有用!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript编程起步(第五课)
Jan 10 Javascript
JavaScript中获取鼠标位置相关属性总结
Oct 11 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
Dec 20 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
Jun 19 Javascript
JS组件Bootstrap实现图片轮播效果
May 16 Javascript
angular ng-repeat数组中的数组实例
Feb 18 Javascript
vue.js国际化 vue-i18n插件的使用详解
Jul 07 Javascript
原生js 封装get ,post, delete 请求的实例
Aug 11 Javascript
JS加密插件CryptoJS实现的Base64加密示例
Aug 16 Javascript
vue中node_modules中第三方模块的修改使用详解
May 31 Javascript
vue fetch中的.then()的正确使用方法
Apr 17 Javascript
vue 弹出遮罩层样式实例
Jul 22 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
Mar 06 #Javascript
vue中本地静态图片路径写法
Mar 06 #Javascript
webpack配置导致字体图标无法显示的解决方法
Mar 06 #Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
Mar 06 #Javascript
React BootStrap用户体验框架快速上手
Mar 06 #Javascript
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 #Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 #Javascript
You might like
德生PL550的电路分析
2021/03/02 无线电
第十节--抽象方法和抽象类
2006/11/16 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Python对列表排序的方法实例分析
2015/05/16 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
详解Django 时间与时区设置问题
2019/07/23 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
食品安全宣传标语
2014/06/07 职场文书
舞蹈专业求职信
2014/06/13 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
入党团支部推荐意见
2015/06/02 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
vue里使用create, mounted调用方法
2022/04/26 Vue.js