动态加载/卸载Javascript

动态加载/卸载Javascript,javascript,web-applications,dynamic,Javascript,Web Applications,Dynamic,我们正在创建一个动态web应用程序,其中只有部分web页面将通过jQueryAjax加载/卸载/重新加载 但我们担心,如果用户长时间(几个小时)运行我们的应用程序而不完全刷新网页,会发生什么情况 例如,我们有一个游戏模块地图,商店,战斗。该页面还包含一些在开头加载的模块(如带有统计信息的标题和聊天)。但是,所有的导航和更改大部分都是在使用AJAX的中心进行的。假设用户执行以下操作: 去地图 去商店 去战斗 去商店 去地图 Map、Shop、Fight都有各自独立的Javascript文件,每个

我们正在创建一个动态web应用程序,其中只有部分web页面将通过jQueryAjax加载/卸载/重新加载

但我们担心,如果用户长时间(几个小时)运行我们的应用程序而不完全刷新网页,会发生什么情况

例如,我们有一个游戏模块地图,商店,战斗。该页面还包含一些在开头加载的模块(如带有统计信息的标题和聊天)。但是,所有的导航和更改大部分都是在使用AJAX的中心进行的。假设用户执行以下操作:

去地图 去商店 去战斗 去商店 去地图

Map、Shop、Fight都有各自独立的Javascript文件,每个请求都会加载这些文件(我猜,大部分是从浏览器缓存加载的),内存使用情况会怎样?当用户“离开”映射时,我们是否需要清理映射变量和事件处理程序?当用户第二次导航到地图时,是否会与旧地图脚本发生冲突?如果我们在卸载时不做一些清理,浏览器是否会开始使用越来越多的RAM,最终用户将被迫重新加载页面


有没有可靠的技术来处理这种情况?

如果将所有函数绑定到某个对象,则可以随时释放该对象和所有函数。例如:

function badFunction(a,b,c) {
   alert("Bad example of function. Can't cleanup this.";
}

var gameObject = new Object();
gameObject.goodFunction = function (a,b,c) {
   alert("Good example of a function");
}

//Here the whole gameObject 'module' will be allowed to be garbage collected (hopefully).
gameObject = null;

如果将所有函数绑定到某个对象,则可以随时释放该对象和所有函数。例如:

function badFunction(a,b,c) {
   alert("Bad example of function. Can't cleanup this.";
}

var gameObject = new Object();
gameObject.goodFunction = function (a,b,c) {
   alert("Good example of a function");
}

//Here the whole gameObject 'module' will be allowed to be garbage collected (hopefully).
gameObject = null;

在其中创建的事件如何?@r3wt您必须手动管理您的事件,JS无法知道哪些事件需要删除,哪些不需要删除。最简单的方法之一是创建一些数组,如gameObject.createdEvents=[],将新创建的事件推送到那里,然后定义一个函数gameObject.cleanup(),该函数将处理所有事件并注销它们。在其中创建的事件如何?@r3wt您必须手动管理事件,JS无法知道哪些事件需要删除,哪些不需要删除。最简单的方法之一是创建一些数组,如gameObject.createdEvents=[],将新创建的事件推送到那里,然后定义一个函数gameObject.cleanup(),该函数遍历所有事件并注销它们。