运行JavaScript setInterval的网站在~1天后开始失败

Mar*_*och 5 javascript c# asp.net wcf

我希望我能在这里更具体,但不幸的是,这可能很难.我基本上希望这是一个"很好"的超时或设置问题.

我们有一个网站在工厂的屏幕上运行(JS/html - ASP.net项目)网站概述.这个屏幕没有键盘所以它应该永远刷新页面 - 也许几年(虽然1周可能没问题).(工厂工人使用它来查看进货运输等)

一切都很完美; 该网站不断更新自己并获取新的正确数据.然后,有时,在早上这个"概述"屏幕没有数据,工作人员必须使用简单的刷新按钮或F5手动刷新网站 - 它修复了所有内容.

我尝试过尝试自己重现错误的一些事情,包括:

  1. 削减互联网连接和许多其他方式使其超时(断点,停止服务等).
  2. 将setInterval的刷新时间设置为100毫秒,让站点运行3-5分钟.(正常计时器是1分钟)
  3. setInterval应该根据我所做的互联网搜索永远运行.
  4. 检查在省电设置中没有关闭"JavaScript频率".

无论; 一旦我插入互联网电缆或其他任何东西,网站恢复正常的功能没有刷新 - 我无法重现错误.

该网站依赖于后端WCF服务和项目集成,但由于工作人员通过简单的刷新来解决这个问题,我假设它没有崩溃.

编辑:我尝试重现错误的浏览器是IE/win7.我明天会询问工厂,但我猜IE/win?也.

setInterval实际上是无限的还是这里还有其他错误?

所有人都非常感谢.

更新:我在今天早上离开网站后以调试模式运行,在网站更新代码的catch子句中有一个断点.有2分钟.超时错误(可能在夜间繁忙的服务器清理),然后在此行之后永远存在空引用错误:

var showHistory = (bool)Session.Contents["ShowHistory"];
Run Code Online (Sandbox Code Playgroud)

我用像工人一样的刷新来修复它.我现在认为它可能是一个会话超时虽然我们一直在ping服务器..当然我的特定会话超时可能是由断点导致它在第一次超时时永远挂起 - 仍然行为与在厂.我将确保稍后用最终解决方案更新你们.

更新2:测试正在进行中.

更新3:工厂是IE 9,他们的测试机器是IE 7,我的机器是IE 9.错误是在IE7上看到的,但在周末运行后不是我的IE9.我们尝试在关键的data_binding代码中关闭ajax缓存,但它没有做任何事情.我测试了内存泄漏,并能创造一个体面的泄漏如果我刷新每分钟100次.我不认为这是问题,刷新清理使用的内存.

我们现在将尝试自动刷新的东西.

jfr*_*d00 3

setInterval()应该永远持续下去。但是,您的脚本/页面可能会泄漏某种资源,最终导致页面脚本或浏览器内部出现错误。

如果是这种情况,您可能最终可以追踪到哪种资源正在泄漏并解决真正的问题,但即使这样做,某些浏览器也会在运行时间很长的进程时遇到自己的问题。

可能值得观察资源使用情况,看看浏览器内存使用情况是否会随着页面运行时间的延长而增加。但是,既然 F5 修复了这个问题,我建议,作为一项安全措施,您只需每隔几个小时重新加载一次页面即可。在大多数现代浏览器中,页面重新加载会释放与先前页面运行相关的所有资源,并从这个角度为您提供一个干净的状态。

只需这样做(每六个小时触发一次):

setTimeout(function() {
    window.location.reload(true);
}, 6 * 1000 * 60 * 60);
Run Code Online (Sandbox Code Playgroud)

不仅会给您一个干净的开始,而且还会自动使您的应用程序检索您可能每隔一段时间对该应用程序所做的任何服务器端更改,因此,如果您发布错误修复,它将在几分钟内自动部署小时。

您还可以在页面中使用元刷新标记。