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中substr,substring,slice.splice的区别说明
Nov 25 Javascript
js控制input输入字符解析
Dec 27 Javascript
Jquery easyui开启行编辑模式增删改操作
Jan 14 Javascript
新入门node.js必须要知道的概念(必看篇)
Aug 10 Javascript
浅析js的模块化编写 require.js
Dec 07 Javascript
微信小程序 template模板详解及实例代码
Mar 09 Javascript
vue-router 中router-view不能渲染的解决方法
May 23 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
Aug 12 Javascript
webpack4简单入门实例
Sep 06 Javascript
JS数组转字符串实现方法解析
Sep 04 Javascript
微信小程序实现文件预览
Oct 22 Javascript
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
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
提升PHP执行速度全攻略(上)
2006/10/09 PHP
我的论坛源代码(六)
2006/10/09 PHP
php数据库抽象层 PDO
2011/05/07 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
php 伪静态之IIS篇
2014/06/02 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
vue router demo详解
2017/10/13 Javascript
Vuex的实战使用详解
2019/10/31 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
Python列表推导式的使用方法
2013/11/21 Python
python编程实现归并排序
2017/04/14 Python
使用Python实现简单的服务器功能
2017/08/25 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
python pillow模块使用方法详解
2019/08/30 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
Python代码注释规范代码实例解析
2020/08/14 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
简单说说tomcat的配置
2013/05/28 面试题
介绍一下代理模式(Proxy)
2014/10/17 面试题
电大学习个人自我评价范文
2013/10/04 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
工作简历自我评价
2015/03/11 职场文书
大学生实习介绍信
2015/05/05 职场文书
开学典礼观后感
2015/06/15 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
浅谈react useEffect闭包的坑
2021/06/08 Javascript