请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于使用proxy深度监听的问题

let obj = {n1: {n2: {n3: {...{nt: 't'}}}}}

如果一个对象本身嵌套很深,比如我要获取obj中nt的属性值,这样即使使用proxy,性能也会很差,还有可能导致内存溢出。
对于这样的问题,有什么好的优化方法吗

正在回答 回答被采纳积分+3

2回答

我爱study 2022-04-13 10:57:41

proxy不是递归调用初始化,可看成是懒加载去依赖收集(用到才去依赖收集)。

1 回复 有任何疑惑可以回复我~
双越 2022-04-10 15:55:56

为什么性能会差,甚至内存溢出呢?

0 回复 有任何疑惑可以回复我~
  • 提问者 慕尼黑249858 #1
    obj中nt的属性值:nt = obj.n1.n2.n3........nt,使用proxy监听的话,会递归调用myReactive,那么函数中的变量一直处于引用状态,不能释放内存,内存占用达到一定程度,会不会出现内存溢出的问题呢?
    function myReactive(target = {}) {
    	if (typeof target !== 'object' || target === null) {
    		return target;
    	}
    
    	let proxyConf = {
    		get(target, key, val) {
    			let keys = Reflect.ownKeys(target);
    			if (keys.includes(key)) {
    				console.log('get', key);
    			}
    			let result = Reflect.get(target, key, val);
    
    			return myReactive(result);
    		},
    	};
    	return new Proxy(target, proxyConf);
    }
    回复 有任何疑惑可以回复我~ 2022-04-10 16:44:20
  • 双越 回复 提问者 慕尼黑249858 #2
    本来原始数据就是嵌套的,就很大,它本该就需要这么多内存,这是符合预期的。就像你电脑打开一个 200M 的视频文件,就需要 200M 以上的内存空间,这并不是内存泄漏。如果你电脑打不开这个 200M 文件,那是你电脑配置太低了,需要升级内存。
    回复 有任何疑惑可以回复我~ 2022-04-10 20:22:26
  • 袁门弟子 回复 双越 #3
    有道理,是数据的问题。
    回复 有任何疑惑可以回复我~ 2022-05-15 18:18:05
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信