2011-07-14 126 views
0

我们正在创建一个动态Web应用程序,其中只有部分网页将通过JQuery AJAX加载/卸载/重新加载。动态加载/卸载Javascript

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

例如,我们有一个模块Map,Shop,Fight的游戏。该页面还包含一些在开始时加载的模块(如带有统计和聊天的标题)。但是所有的导航和更改大多发生在使用AJAX的中心。比方说,用户将执行以下操作:

进入地图 去商店 去抗击 去商店 去地图 ...

至于地图,商店,搏击有自己单独的JavaScript在每个请求上加载的文件(我猜想,大部分来自浏览器缓存),内存使用会发生什么?当用户从Map中“导航”时,我们是否需要清理Map变量和事件处理程序?当用户第二次导航到Map时是否会与旧的Map脚本发生冲突?如果我们没有对卸载进行一些清理,浏览器是否会开始使用越来越多的内存,那么最终用户将不得不重新加载页面?

是否有任何可靠的技术来处理这种情况?

回答

3

如果您将所有功能绑定到某个对象,则可以在任何时候随意释放具有所有功能的对象。例如:

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; 
+0

它创建的事件呢? – r3wt

+0

@ r3wt您必须手动管理您的事件,JS无法知道哪些事件需要删除,哪些不需要。最简单的方法之一就是创建一些数组,例如gameObject.createdEvents = [],在那里推新创建的事件,然后定义一个函数gameObject.cleanup(),它会遍历所有事件并取消注册。 – bezmax