Memory leaks 什么时候给你打电话?
什么时候应该打电话?它是否曾被YUI生命周期自动调用?页面卸载是否会导致YUI生命周期对页面处理期间创建的所有对象调用destroy?我一直在这样一种假设下工作,即我需要自己进行所有销毁调用,但当ajax调用替换我逐步增强的代码部分时,这会变得很棘手。例如:Memory leaks 什么时候给你打电话?,memory-leaks,yui,destroy,Memory Leaks,Yui,Destroy,什么时候应该打电话?它是否曾被YUI生命周期自动调用?页面卸载是否会导致YUI生命周期对页面处理期间创建的所有对象调用destroy?我一直在这样一种假设下工作,即我需要自己进行所有销毁调用,但当ajax调用替换我逐步增强的代码部分时,这会变得很棘手。例如: <div id="replaceMe"> <table> <tr> <td>1</td> </tr> <tr>
<div id="replaceMe">
<table>
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
</table>
<script>
YUI().use('my-lib', function(Y) {
Y.mypackage.enhanceTable("replaceMe");
});
<script>
</div>
单击处理程序将向我的应用程序提交一个请求,该请求将更改页面。我是否需要记住所有可增强的对象,并让onunload处理程序调用每个对象的destroy方法?或者YUI框架会处理这个问题吗
这个问题的最后一部分是,我还有其他代码,通过替换。这样,脚本将重新运行,并使用一个新的EnhancedTable扩展新的。我是否需要记住旧表,并在新表破坏它之前销毁它?我不将处理程序设置为属性,而是将它们全部存储在如下数组中:
this._handlers = [
container.delegate("mouseover", this._mouseover, "tr", this ),
container.delegate("mouseout", this._mouseout, "tr", this ),
container.delegate("click", this._click, "tr", this )
];
然后添加执行以下操作的析构函数方法
destructor : function() {
new Y.EventTarget(this._handlers).detach();
}
它可以完成同样的事情,但你的工作量要少得多
理想情况下,不要对每个表运行此操作,而是将所有代理都附加到replaceMe,这样就不必在每次更改内容时都重新创建它,无论这是从何处发生的
YUI不会自动调用。卸载时为您销毁,但它会清理DOM SUB。以上是额外的积分,仅当您要自己销毁对象时才需要。我不将处理程序设置为属性,而是将它们全部存储在如下数组中:
this._handlers = [
container.delegate("mouseover", this._mouseover, "tr", this ),
container.delegate("mouseout", this._mouseout, "tr", this ),
container.delegate("click", this._click, "tr", this )
];
然后添加执行以下操作的析构函数方法
destructor : function() {
new Y.EventTarget(this._handlers).detach();
}
它可以完成同样的事情,但你的工作量要少得多
理想情况下,不要对每个表运行此操作,而是将所有代理都附加到replaceMe,这样就不必在每次更改内容时都重新创建它,无论这是从何处发生的
YUI不会自动调用。卸载时为您销毁,但它会清理DOM SUB。以上是额外的积分,只有当你自己要销毁这个物体时才有必要