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 相关文章推荐
一些实用的jQuery代码片段收集
Jul 12 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
Feb 25 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
Feb 23 Javascript
详谈jQuery中的一些正则匹配表达式
Mar 08 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
react高阶组件经典应用之权限控制详解
Sep 07 Javascript
对vue.js中this.$emit的深入理解
Feb 23 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
Jul 06 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
Aug 25 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
Nov 26 Javascript
小程序组件之自定义顶部导航实例
Jun 12 Javascript
JavaScript自定义超时API代码实例
Apr 30 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
ajax php 实现写入数据库
2009/09/02 PHP
php设计模式 Template (模板模式)
2011/06/26 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
python 文件查找及内容匹配方法
2018/10/25 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
利用python 下载bilibili视频
2020/11/13 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
品恩科技软件测试面试题
2014/10/26 面试题
硕士研究生个人求职信
2013/12/04 职场文书
校园文明倡议书
2014/05/16 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
联谊活动总结范文
2015/05/09 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
创业计划之特色精品店
2019/08/12 职场文书