我的网站适用于jQuery + AJAX,并且有唯一的javascript文件,当用户打开任何页面时会加载一次,所以我用来向所有元素添加事件监听器,例如:<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dip" >
<TextView
android:id="@+id/singleDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
</RelativeLayout>
。< / p>
有一段时间我注意到代码中有$(document).on(...)
个太多,我很害怕。当用户点击链接/返回按钮时,我每次服用9粒药物并强制它删除无用的听众。
.on(...)
那有什么意义吗?也许有很多听众做了一些我不知道的坏事?
答案 0 :(得分:0)
当你将一个监听器附加到一个事件时,它确实需要内存,它可以(如果完全取消选中)导致与内存相关的问题。根据我的经验,最好在对象中使用cleanup
方法,当某个事件触发时,您使用.off()
方法取消注册事件侦听器。
这些类型的方法的特定逻辑将根据您的项目而有所不同,但形式如下:
var MyApp = {
cleanup: function cleanMyApp(event) {
this.off('#myId1', myMethod1);
this.off('#myId2', myMethod2);
}
}
$('document').on('ready', function() {
$(document).on('importantEvent', function(event) {
event.preventDefault(); // if you need to
MyApp.cleanup();
});
// or
$('#elem').on('something', MyApp.cleanup);
});
所以是的,一次注册过多的监听器可能会导致问题,但您可以使用浏览器的开发工具等监控内存使用情况。特别是你可能会耗尽堆栈(和堆?)内存并可能导致浏览器崩溃。
在处理这类问题方面也有很好的答案here。