【问题标题】:Wicket AbstractAjaxTimerBehavior and performanceWicket AbstractAjaxTimerBehavior 和性能
【发布时间】:2012-04-21 21:17:20
【问题描述】:

我在我的 Wicket 应用程序中使用 AbstractAjaxWicketBehavior,当出现更多 AJAX 调用时,它的性能似乎随着时间的推移而下降。当页面在没有 AJAX 的情况下刷新时,性能又好了。我想知道这是正常现象还是存在某种内存泄漏?我不能简单地附加代码,因为它分布在更多的类中,并且需要花费太多的精力来理解,但总之我想这样做:

  1. 创建并启动计时器
  2. 重复一些代码 10 次
  3. 停止计时器
  4. 为属性设置一些值
  5. ajax 刷新(导致显示/隐藏某些组件)

然后再做同样的事情(假设是无限次)。

即使我使用 100 毫秒的恒定更新间隔,此流程的每次重复都会变慢。

由于计时器是一种行为,不允许重新启动或重用,因此每次都会作为新实例创建并附加到表单组件。

计时器如下所示:

static int count = 0
new AbstractAjaxTimerBehavior(Duration.milliseconds(100)) {
 // do some code
 count++
 if(count == 10) {
  stop();
  // do some code
 } 
}

此行为附加到 Panel 内的 Form 上,单击 AjaxLink 时 Form 会刷新(添加到 AjaxRequestTarget)。每次我在添加新行为之前从表单组件中删除旧计时器。

一切正常,但此过程的每次重复运行速度较慢(第一次很完美,第二次也大约 100 毫秒,但随后变慢(重复 10 或 15 次后,刷新间隔约为 1 秒)并且应用程序中的所有其他 AJAX 调用也明显变慢),所以我怀疑存在内存泄漏......有什么明显的原因吗?或者有什么方法可以更好地为我的目的制作检票口计时器?任何建议表示赞赏。谢谢。

【问题讨论】:

    标签: ajax wicket


    【解决方案1】:

    我们的 wicket 应用程序也往往会因每个 AJAX 请求而变慢。我不确定这是否是完全相同的问题,或者它是否与 AjaxTimerBehavior 特别相关,但是:

    我们发现造成这种情况的一个原因是由于 HTML 替换导致浏览器中的伪泄漏。显然浏览器在页面重新加载之前无法释放内存。

    您可以使用任务管理器(或其他工具)监控浏览器内存,并观察内存随着每个 AJAX 请求的增加以及如何在整个页面重新加载 (F5) 时缓解。尤其是在 IE 中。

    我们用 AJAX 请求替换了很多 HTML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多