Chu*_*ckE 5 javascript jquery memory-leaks browser-cache
我最近在本教程中读到某些jQuery泄漏可以通过$.cache变量进行跟踪,你应该总是检查它的大小,如果它太大,你做错了.
嗯,有多大太大了?有没有办法检查变量,看看它吃多少内存?
我正在开发一个只通过加载主页来缓存210个对象的网站.太多了吗?我很感激在这里对这个问题进行彻底的解释.
$.cache\ 的大小从表面上看并不能说明任何有关内存泄漏的信息。它可能非常小并且仍然存在内存泄漏,或者它可能非常大并且没有任何内存泄漏。
如果您知道页面上一次有 10 个事件侦听器与 jQuery 绑定,但$.cache还有更多条目,那么您就知道发生了泄漏。
一个巨大的内存节省方法是使用事件委托,而不是将事件侦听器附加到每个单独的元素。
\n\n说:
\n\n<ul>\n <li></li>\n <li></li>\n <li></li>\n</ul>\nRun Code Online (Sandbox Code Playgroud)\n\n$("li").on( "click", fn )会附加 3 个单独的事件处理程序(当然,如果您有更多 li,则更多),而$("ul").on( "click", "li", fn)无论您有多少 li 元素,都只会附加一个事件处理程序,但会得到相同的结果。
$("button").click( function() {\n $("#target")[0].innerHTML = "";\n $("<div>").appendTo( $("#target")).click( $.noop );\n $("#log").text( Object.keys( $.cache ).length );\n});\xe2\x80\x8b\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n原因是使用了 .innerHTML,它不是 jQuery 的一部分,因此无法进行清理。
\n\n修复方法是使用 jQuery 方法来实现相同的目的:
\n\n$("button").click( function() {\n $("#target").html("");\n $("<div>").appendTo( $("#target")).click( $.noop );\n $("#log").text( Object.keys( $.cache ).length );\n});\xe2\x80\x8b\nRun Code Online (Sandbox Code Playgroud)\n\n\n
| 归档时间: |
|
| 查看次数: |
1086 次 |
| 最近记录: |