JavaScript 从事件处理入手的优化

前言

除了事件委托外另一个从事件处理优化的途径即及时清理挂载的事件处理程序.
事件委托通过限制了浏览器代码与JavaScript之间建立的联系数量以优化性能,那么及时切断这种联系也可达到相同目的.


一、如何清理

但仅移除DOM元素是无法达到目的的.
删除的元素上若有事件处理程序, 该DOM元素对象就不会被正常清理, 就像闭包不被回收一样, 用得上的东西便不会被垃圾回收机制扔掉.有的浏览器还会把元素对象和事件处理程序都留下.
比较保险的方式是先摘除掉事件处理程序:

xxx.onclick = null

xx.addEventListener('click', null);

而后移除DOM元素对象便不会残留事件处理程序.


二、另一个清理时刻

此外,页面unload(卸载)后, 事件处理程序也不会被清理.

"好像所有浏览器都会受这个问题影响”《Javascript高级程序设计》中称.

意味着用户每前进, 后退或刷新页面, 内存中都会增加残余对象, 所以最好在onunload事件处理程序中卸载挂载到DOM的事件处理程序.

遵循原则即: 在onload里挂载了什么, 就在onunload里摘除什么.

window.onunload = () => {
  xx.addEventListener('click', null);
}

END

😃

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值