jQuery的cleanData为何在移除SCRIPT元素时专门防止IE内存泄漏?
导读:本期聚焦于Ada创作的《jQuery的cleanData为何在移除SCRIPT元素时专门防止IE内存泄漏?》,敬请观看详情。旧版IE并不依赖标记清除来回收内存,而是使用引用计数跟踪每个对象。SCRIPT元素一旦执行过脚本,节点本身、脚本闭包和jQuery缓存之间很容易形成多条引用链,普通DOM移除无法让引用计数归零。jQuery的cleanData在清理节点数据时,对SCRIPT元素采用了不同于普通DIV的释放路径:优先通过removeAttribute移除expando属性,而不是直接delete,同时先断开事件句柄,再删除jQuery.cache中的对应项。文章结合cleanData的简化源码分析这条分支的触发条件,说明为什么旧IE中先移除expando再删除缓存能够切断DOM到缓存对象的引用。随后给出一个可在旧项目中安全移除脚本节点的函数示例,覆盖src置空、回调断开和节点移除的完整顺序,并解释现代浏览器为何不再需要这些补丁。
栏目:jQuery 时间:10-25 jQuery cleanData

