当前位置:首页 > 内存 > 正文

前端如何查看内存泄漏(前端内存泄露如何解决)

  • 内存
  • 2024-08-26 22:17:40
  • 1113

一、vue在比较大的项目中容易出现内存泄漏的原因是什么?

在处理较大的项目时,选择使用React而不是vue。Vue在较大的项目中容易出现内存泄漏的原因有哪些?
Property()
如果数据中加载了非常复杂的方法或者数据,Property()有很多属性需要监控,还有loopwhenpage等操作;跳转时,组件将被销毁,但vue实例不会被销毁。data数据挂在vue实例中,vue实例会被挂载
(在vue中维护依赖)<.br/>watcher(v-html,v-if)==>用于连接视图层和响应数据层
MVVM:M(数据)、V(视图)、VM(LinkWatcher)
每个指令都有一个watcher,每个watcher对应的元素都有一个ID。
多个ID维护在一个数组中如果项目中有多个v-if,v-if激活后,该命令消失当数据量很大时,消失命令对应的id可能无法确定,或者数组为空,或者计数组坏掉。
导致内存泄漏
Property()否监听数组的变化
Property()只能检测对象开头的数据所拥有的key肯定不会触发数组推送(因为数据是后面插入的)
数组移位可以激活
pop或者shift可以激活
3。保留简约原则


Property()只能劫持属性,每个属性都需要手动浏览
中$set原理内部做了什么以及如何处理
isValidArrayIndex--是否是有效索引,是否是已存在的索引(例如数组长度为3则0,1,2都有效索引)
8.

import{dep}from"../utils/index"----dep:这是封装的Property()方法
constarrayProto=ype----原始对象数组构造函数模板
constarrayMethods=(arrayProto)--新对象继承数组原型对象
传入的原始方法需要重写,扩展上述方法原始基类然后使用observable重新渲染作为响应数据

(实现类继承)


二、Chrome开发者工具Memory面板介绍及内存泄漏分析在前端开发中,随着项目的增长,内存管理变得越来越重要。内存问题会显着降低用户体验。Chrome开发者工具中的内存面板可以实现实时监控和早期分析。
“内存”面板中的堆快照功能可帮助您识别DOM树中的内存泄漏。如果页面的DOM树或JavaScript不再被垃圾收集根(GC根)引用,并且某个节点已从DOM中删除,但GC根中仍然有对其的引用,则会发生内存泄漏。要拍摄快照,只需在开发人员工具中选择HeapSnapshot,然后单击Takesnapshot。
接下来GCroot是一个核心概念,是在浏览器中创建的,比如Vue实例。仅收集从GC根无法到达的对象。以Vue项目为例,用户反映多次注册后内存使用量增加,并且旧组件似乎没有被GC。向Vue组件添加标签可以帮助您追踪引用问题。在文件中,调整大小侦听器中的错误处理导致窗口对象不断引用vue组件,从而导致内存使用量增加而不是减少。
发现问题后,修复匿名函数并测试。内存使用量将开始波动,表明组件已被正确回收。拍摄另一个快照将帮助您验证内存泄漏是否已解决并防止OutofMemory错误。因此,熟练使用MemoryPanel进行内存分析是前端开发人员预防和解决内存问题的重要工具。