由于项目体积过去庞大,vue项目编译时出现内存不足的情况,
JS stacktrace(node内存溢出)
内存溢出的原因
Node程序程序之所以会出内存溢出的情况,可以分为三方面的原因:1. V8本身分配的内存较小、2. JavaScript语言本身限制、3. 程序员使用不当。
因为在Node中,通过JavaScript使用内存时只能使用部分内存(64位系统:1.4 GB,32位系统:0.7 GB)V8是Google在Chrome浏览器中使用的JavaScript引擎。而在浏览器环境中,运算一般不需要多大内存。V8对每个进程分配的运行内存,在32位系统中约为700MB,而在64位系统中约为1.4GB。
https://itbilu.com/nodejs/core/Ey_SnYXnx.html
解决:
1. 使用[process.nextTick()](http://itbilu.com/nodejs/core/EyEJTxF8.html#process_process_nexttick_callback)防止事件堆积
forLoops(0);
function forLoops(i) {
if(i<10000000)
{
var site = {};
site.name = ‘IT笔录’;
site.domain = ‘itbilu.com’;
// 这里是一个保存或更新等操作<br /> setTimeout(()=>{<br /> console.log(i, site);<br /> }, 0)<br /> process.nextTick(forLoops, i+=1);<br /> }<br />}<br />每次循环`V8`都会回收内存一次,因此内存不会再溢出。但这样做必然会造成运行效率的降低,而应该在速度在安全之间平衡,控制好循环的安全次数。
2. 增加V8内存空间
Node.js提供了一个程序运行参数--max-old-space-size,可以通过该参数指定V8所占用的内存空间,这样可以在一定程度上避免程序内存的溢出。
3. 使用非V8内存
Node.js程序所使用的内存分为两类:
V8内存:数组、字符串等JavaScript内置对象,运行时使用“V8内存”系统内存:[Buffer](http://itbilu.com/nodejs/core/4JWh0OM.html)是一个Node.js的扩展对象,使用底层的系统内存,不占用V8内存空间。与之相关的文件系统[fs](http://itbilu.com/nodejs/core/4y-N3wJS.html)和流[Stream](http://itbilu.com/nodejs/core/4y3SPWbS.html)流操作,都不会占用V8内存。
在程序允许的情况下,应该将数据保存在Buffer中,而不是转换成字符串等JS对象,这样可以避免V8内存的过多占用。
这里————
修改node_modules/bin/webpack-dev-server.cmd文件
增加 “—max_old_space_size=4096”配置,单位是k

mac:
这里介绍MAC电脑上修改环境变量的方案 (命令的输入须英文模式)
1. 选择终端,打开命令行工具
2. 输入:echo $PATH,按回车执行命令查看当前变量值
3. 输入:sudo vi ~/.bash_profile,按回车,输入电脑密码后,将打开bash_profile文件,
(没有此文件的话,系统会新建此文件,且内容为空白文档)
4. 键盘按 i 开始编辑,输入 export NODE_OPTIONS=—max_old_space_size=6000
5. 编辑完成,按 esc 退出编辑模式
6. 输入 :wq 保存退出, :q! 不保存退出
7. 输入 source ~/.bash_profile (修改系统环境变量,须source一下,才能生效)
