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

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

  •  
  •   IT1024 · 2022-01-04 23:03:08 +08:00 · 6315 次点击
    这是一个创建于 1052 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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