采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
let obj = {n1: {n2: {n3: {...{nt: 't'}}}}}
如果一个对象本身嵌套很深,比如我要获取obj中nt的属性值,这样即使使用proxy,性能也会很差,还有可能导致内存溢出。对于这样的问题,有什么好的优化方法吗
proxy不是递归调用初始化,可看成是懒加载去依赖收集(用到才去依赖收集)。
为什么性能会差,甚至内存溢出呢?
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); }
本来原始数据就是嵌套的,就很大,它本该就需要这么多内存,这是符合预期的。就像你电脑打开一个 200M 的视频文件,就需要 200M 以上的内存空间,这并不是内存泄漏。如果你电脑打不开这个 200M 文件,那是你电脑配置太低了,需要升级内存。
有道理,是数据的问题。
登录后可查看更多问答,登录/注册
面向1-3年前端的框架及项目面试“刚需内容”
4.1k 1
2.6k 11
1.3k 11
1.2k 11