0

我从 ajax 请求中收到了一段纯 html。

<h1>Title</h1>
<div>
  content
</div>

这是最简单的形式。每件作品都包含一个<h1>标题标签和一个<div>包含内容的标签。我container在需要用返回的 html 片段填充的 html 页面中有一个很好的格式。

这是容器:

<div id="container">
  <div class="header">
  </div>
  <div class="content">
  </div>
</div>

我使用以下 javascript 函数来解析html并将其放在container.

function loadContent(id, data) {
    var container = $('#'+id);
    var title = '';
    var content = '';

    $(data).filter('h1:first').each(function() {
        title = $(this).html();
        content = $(this).next().html();
    });

    $('div.header',container).html(title);
    $('div.content', container).html(content);
}

一切似乎都“正常”,随后具有不同 html 内容的 ajax 请求加载得非常快。但是当我单击一个调用整个页面刷新的链接时,它会在加载单击的超链接之前挂起大约 3 或 4 秒。这让我觉得这是一个 javascript 问题,也许某些内容留在内存中?有人可以看到这可能会变得低效吗?

4

2 回答 2

2

我不确定我是否理解这里的意图。如果您只分配一个标题/内容对,为什么要使用 .each()?

另外,请记住,Firebug 本身经常会导致严重的性能问题。在假设您的代码是问题之前,请务必在禁用它的情况下进行测试。

最后,如果不是这样,请使用 Firebug 的分析器来准确确定代码的哪一部分运行缓慢。

更新,基于评论。试试这个:

function loadContent(id, data) {
  var container = document.getElementById(id);

  var title = '';
  var content = '';

  $data = $(data);
  $title = $data.filter('h1:first');

  title = $title.html();
  content = $title.next().html();

  $('div.header', container).html(title);
  $('div.content', container).html(content);
}
于 2009-07-26T00:54:45.130 回答
1

我会使用调试器来查找延迟的来源。像 FireFox w/FireBug 这样的东西来验证触发整个页面刷新的链接实际上是在调用这个代码,而不是在其他地方挂断。和带有 TamperData 的 FireFox 来监视发出和返回的请求,以查看延迟是否是由等待外部响应引起的。

:(

于 2009-07-26T00:12:12.637 回答