避免将jquery选择器作为构造函数参数发送时内存泄漏
Avoid memory leaks sending jquery selectors as constructors parameters
我在不使用MVC框架的情况下构建了一些视图。只有jQuery和JavaScript。我或多或少有,下一个建设:
function LeWildConstructor ($selector) {
$selector.find('anElement').bind(function () {
...
});
}
$(function () {
window.wildConstructor = new LeWildConstructor($('.container'));
});
一位软架构师告诉我,如果页面继续打开一段时间,这种结构可能会泄漏。
他建议做一些类似的事情:
function LeWildConstructor () {
var $selector = $('.container')
$selector.find('anElement').bind(function () {
...
});
}
$(function () {
window.wildConstructor = new LeWildConstructor();
});
我认为两种方法都是一样的。
我知道在准备好的文档之后,构造函数调用一次,参数发送一次,而jQuery是懒惰的,一旦我发送了节点元素,每次我在构造函数内部引用$selector
时就不再调用了。
但我不确定我是否错过了其他可能导致泄漏的做法。
如果不将其分配给变量,我不明白为什么会有任何泄漏,但请考虑以下代码:
$(function () {
var something = $('.container');
window.wildConstructor = new LeWildConstructor();
});
在删除全局变量之前,不会收集此闭包,因此另一种方法确实避免了1个引用被"泄漏"。现在,在任何页面的内存中都有一个额外的jQuery选择器可能没有什么区别,特别是如果只调用几次的话。
我不确定jQuery是如何工作的,但它似乎是一个对象(引用)数组,应该是超轻量级的,以便在内存中浮动。
TL;DR尽管相关,但我认为他的考虑在这个具体案件中是毫无意义和错误的。
经过更多思考后编辑在t.niese注释
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 使用Express捕获参数
- 参数变量出现ngTable指令问题
- AngularJS:我可以跳过函数参数回调吗
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 要求未定义JS回调参数
- 我的jQuery插件参数没有正确启动,遇到了问题
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- jquery设置为使用参数运行
- Javascript”;类“;带有参数的扩展
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 函数未将值作为参数传递
- 如何将参数传递到angularJs中的工厂
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- MVC 3页面导航和使用javascript传递参数
- 从查询字符串参数推断出正确的数据类型
- 传递包含'%的参数'在URL中
- 避免将jquery选择器作为构造函数参数发送时内存泄漏
- JavaScript:参数泄漏