V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
IT1024
V2EX  ›  程序员

被面试官问到内存优化问题,被菜到了!

  •  
  •   IT1024 · 222 天前 · 5400 次点击
    这是一个创建于 222 天前的主题,其中的信息可能已经有所发展或是发生改变。

    面试官:你一般是如何解决内存泄露问题的?( vue 项目) 我说:比如一些定时器,dom 事件、自定义事件用完后直接放到 beforedestroy 周期函数内销毁就可以了 面试官:但如果我刷新页面并不会执行 beforedestroy 哦,你再想想?按你说的不执行 beforedestroy 就无法销毁。

    这问题把我问懵了,我问他他说让我回去试试 beforedestroy 是怎么执行的,并没有直接回答。

    我试了下刷新确实不会执行 beforedestroy ,想问问大佬们,刷新页面没有执行 beforedestroy ,那页面不断刷新内存会一直涨吗?算不算内存泄漏?

    29 条回复    2022-01-06 08:00:23 +08:00
    iamzuoxinyu
        1
    iamzuoxinyu  
       222 天前   ❤️ 5
    刷新了整个 isolate 实例都被销毁重建了,哪来的泄露。
    ericls
        2
    ericls  
       221 天前 via iPhone
    如果泄漏那是浏览器的问题
    TomChaai
        3
    TomChaai  
       221 天前   ❤️ 2
    就这么回答:你就是个写前端的,用户在浏览器上点了刷新关你屁事。
    iugo
        4
    iugo  
       221 天前
    刷新页面并不会执行 beforedestroy 这句话本身没问题, 但和内存泄漏也没关系.

    或许面试官是想说异步嵌套, 事件订阅问题?
    XCFOX
        5
    XCFOX  
       221 天前
    EPr2hh6LADQWqRVH
        6
    EPr2hh6LADQWqRVH  
       221 天前   ❤️ 1
    浏览器前端哪来的内存泄漏我就不知道,都 xjb 考什么呢
    dangyuluo
        7
    dangyuluo  
       221 天前
    你也知道有的面试官是在刷存在感,总得显得他比你懂得多,不然谁面试谁呢?
    thedrwu
        8
    thedrwu  
       221 天前 via Android   ❤️ 12
    就算拔了电源也不会执行 beforedestroy
    murmur
        9
    murmur  
       221 天前
    一般的页面场景很少内存泄露,除非是那种非得用着 webworker+webasm 做本来是 c++ native 应该做的事

    比如连爱剪辑 快剪辑都做不过的超简单视频剪切功能
    lanbos
        10
    lanbos  
       221 天前 via Android
    是有场景会常驻的 web 的,做 electron 和 hybrid 的都会遇到,内存泄漏根本还是用完及时回收,不一定非要在 vue 的生命周期里。非要兜底的话 web 有离开的 hooks 长用来埋点可以看 w3c 的 BOM 标准,面试官可能想问的是这个。宿主容器也有对应的 hooks ,防止泄漏在宿主容器上做更普遍。
    eason1874
        11
    eason1874  
       221 天前
    可能你说的刷新页面是 location.reload ,而他理解的刷新页面是 history.pushState
    villivateur
        12
    villivateur  
       221 天前 via Android
    在我的理解里,只有 C 之类的底层代码才需要考虑内存泄露问题,JS 在浏览器上跑,还需要考虑内存泄露吗?
    stkstkss
        13
    stkstkss  
       221 天前
    你直接反问 你实际解决过内存泄漏
    yaoyao1128
        14
    yaoyao1128  
       221 天前
    @villivateur 存在的……但是 js 跑在浏览器的时候浏览器会限制内存使用所以不会像 c 那样直接炸了……并且浏览器会在一定程度上预防,但是不代表代码运行时候不会出现内存泄漏
    developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management 里面有讲到
    sunny1688
        15
    sunny1688  
       221 天前   ❤️ 1
    你直接反问 你实际解决过内存泄漏
    ---------------
    @stkstkss 他会让你回去等通知
    rekulas
        16
    rekulas  
       221 天前   ❤️ 1
    @avastms 进入单页面时代之后,前端内存照样很容易泄露如果不注意资源释放,举个例子,通过组件创建 video 标签播放视频,退出时哪怕你把 video 移除可能都没有真正释放,必须先 stop
    不释放的后果就是内存不断占用知道耗尽资源
    另一个类似例子,单个标签下可创建的多媒体标签是有限的,哪怕 remove 掉似乎也会占用额度,超额之后就无法再申请
    unco020511
        17
    unco020511  
       221 天前
    前端也谈内存泄露??
    cweijan
        18
    cweijan  
       221 天前
    这面试官装逼, 前端能吃几个内存
    LowBi
        19
    LowBi  
       221 天前 via Android
    啊?现在前端面试都谈内存泄漏了?笑拉了
    lscexpress
        20
    lscexpress  
       221 天前
    @sunny1688 面试从来都是双向选择
    juzisang
        21
    juzisang  
       221 天前
    前端内存泄露会导致网页奔溃,一般都是定时器一直刷,没释放资源导致的。比如隔几秒调用一下 echart.init ,基本上半个小时就崩了
    Dididadada
        22
    Dididadada  
       221 天前   ❤️ 1
    做 webgl 还有视频直播的时候遇到的内存泄露还是挺多的,反正在面试 webgl 的时候,内存管理应该是必问的,就单说 vue ,这种要管理组件的东西聊内存泄漏也是很正常的吧,不理解为什么楼上那么多人觉得离谱
    yangzzzzzz
        23
    yangzzzzzz  
       221 天前
    前端那个不算内存泄露吧 你写的死循环或者定时器 一直不销毁内存肯定越来越多
    66beta
        24
    66beta  
       221 天前
    @eason1874 那也该叫跳转页面
    2i2Re2PLMaDnghL
        25
    2i2Re2PLMaDnghL  
       221 天前   ❤️ 1
    他会让你回去等通知
    ---------------
    @sunny1688 我直接说不必了已经拉黑了
    stkstkss
        26
    stkstkss  
       221 天前
    @sunny1688 还怕个毛等通知 明显装逼面试官
    k9982874
        27
    k9982874  
       221 天前
    你问他刷新页面后浏览器是如何释放页面内存的
    wktrf
        28
    wktrf  
       220 天前
    都刷新了,出现内存溢出难道不是浏览器的锅吗?这面试官是搞不懂 Vue 是干啥的吧
    kensoz
        29
    kensoz  
       220 天前
    我也遇到过内存泄漏问题,场景就是一个类似于商场触摸屏那种东西
    那个东西点击进入菜单一段时间没有操作就会有定时器返回首页
    机器都是成天开,大量用户的时候,出现过内存泄漏
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2376 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:31 · PVG 23:31 · LAX 08:31 · JFK 11:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.