强制页面刷新以释放内存

时间:2014-06-18 18:14:05

标签: angularjs memory-management memory-leaks single-page-application angular-ui-router

单页应用程序需要仔细管理事件,DOM元素和javascript对象,以避免泄漏。

我们将竭尽所能地管理记忆和挤压泄漏。也就是说,应用程序很大,使用了很多库,并且可以一次打开几天。

我们需要一个安全阀。

我正在寻找有关如何在单页应用中不引人注意地触发页面刷新的想法,以强制释放内存。

一个想法是检测用户何时空闲超过N分钟,然后进行刷新,因为它不太可能中断它们。使用AngularJS ui-router将大部分应用程序状态保存在URL中,因此这在某些时候会起作用。

问题在于,虽然某些状态在路由器中,但并非所有状态都存在。用户可能有未保存的更改,或者打开了一些未处于URL状态的模态或弹出菜单。解决方案可能是检测用户更改并禁止刷新,如果发生了任何不在URL中的更改。我不知道如何一般地实现这个。也许我们只是把所有对URL状态都有点重要的东西。

另一个想法是观察应用程序状态更改事件$stateChangeStart,并且每{{}}}时间执行一次实际的浏览器导航到该URL,而不仅仅是应用程序状态更改。这将永远不会导致丢失“子状态”,但会导致较慢的页面更改响应和屏幕闪烁。也许每20个屏幕更改一次就可以了。

有没有人有更好的想法?

1 个答案:

答案 0 :(得分:0)

只关注未保存的更改和数据:

我有一个单页应用,在一个部分中有几个标签,每个标签都包含一个表单。当每个表格变得“脏”时#34;它会触发对主控制器的通知,并为该表单设置一个标志。当用户保存特定表单时,标志变为未设置状态。如果用户试图离开 - 在路线改变发生之前,它检查是否设置了任何标志,然后通过模态通知用户某些特定信息没有被保存。然后,用户可以决定是继续路线更改还是返回并保存数据。

可以轻松修改此选项以对页面刷新执行相同的检查,如果有未保存的数据,则取消页面刷新或将更改保存到浏览器的本地存储中,以便在页面刷新完成后进行调用。 / p>