写点什么

vue 项目启动失败,内存不足处理

作者:甜点cc
  • 2022-10-27
    河南
  • 本文字数:1243 字

    阅读完需:约 4 分钟

问题

由于项目体积过去庞大,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()防止事件堆积

forLoops(0);function forLoops(i) {  if(i<10000000){    var site = {};    site.name = 'IT笔录';    site.domain = 'itbilu.com';    // 这里是一个保存或更新等操作    setTimeout(()=>{   		console.log(i, site);    }, 0)    process.nextTick(forLoops, i+=1);  }}
复制代码


每次循环V8都会回收内存一次,因此内存不会再溢出。但这样做必然会造成运行效率的降低,而应该在速度在安全之间平衡,控制好循环的安全次数。

2. 增加V8内存空间 推荐

Node.js 提供了一个程序运行参数--max-old-space-size,可以通过该参数指定V8所占用的内存空间,这样可以在一定程度上避免程序内存的溢出。

3. 使用非V8内存

Node.js 程序所使用的内存分为两类:


  • V8内存:数组、字符串等JavaScript内置对象,运行时使用“V8 内存”

  • 系统内存Buffer是一个 Node.js 的扩展对象,使用底层的系统内存,不占用V8内存空间。与之相关的文件系统fsStream流操作,都不会占用V8内存。


在程序允许的情况下,应该将数据保存在Buffer中,而不是转换成字符串等 JS 对象,这样可以避免V8内存的过多占用。

4. 实际运用的解决方案

这里--------

windows

修改 node_modules/bin/webpack-dev-server.cmd 文件(注意:具体的要根据采用什么方式启动,有 cmd, powershell 等,去修改对应的启动文件即可)


增加 "--max_old_space_size=4096"配置,单位是 k


Mac

这里介绍 MAC 电脑上修改环境变量的方案   (命令的输入须英文模式)


  1. 选择终端,打开命令行工具

  2. 输入:echo $PATH,按回车执行命令查看当前变量值

  3. 输入:sudo vi ~/.bash_profile,按回车,输入电脑密码后,将打开 bash_profile 文件,


(没有此文件的话,系统会新建此文件,且内容为空白文档)


  1. 键盘按 i 开始编辑,输入 export NODE_OPTIONS=--max_old_space_size=6000

  2. 编辑完成,按 esc 退出编辑模式

  3. 输入  :wq  保存退出,  :q!  不保存退出

  4. 输入 source ~/.bash_profile  (修改系统环境变量,须 source 一下,才能生效)



我是 甜点 cc


热爱前端开发,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。


希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。

发布于: 刚刚阅读数: 3
用户头像

甜点cc

关注

微信公众号:看见另一种可能 2020-04-30 加入

https://blog.i-xiao.space/

评论

发布
暂无评论
vue项目启动失败,内存不足处理_JavaScript_甜点cc_InfoQ写作社区