【问题标题】:jQuery AJAX slow in Firefox, fast in IEjQuery AJAX 在 Firefox 中慢,在 IE 中快
【发布时间】:2009-06-24 16:36:47
【问题描述】:

我正在使用 jQuery 发布到 ASP .NET Web 服务以实现自定义自动完成功能。该代码工作得很好,除了它在 FireFox 中的速度很慢(不能让它快于 1 秒)。 IE 速度极快 - 效果很好。我使用 Firebug 在 Firefox 中观看帖子。

这是服务代码:

<ScriptService(), _
WebService(Namespace:="http://tempuri.org/"), _
WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1), _
ToolboxItem(False)> _
Public Class TestWebSvc
  Inherits System.Web.Services.WebService

  <WebMethod(), _
  ScriptMethod(ResponseFormat:=Script.Services.ResponseFormat.Json, UseHttpGet:=True)> _
  Public Function GetAccounts(ByVal q As String) As Object

    'Code taken out for simplicity

    Return result

  End Function

End Class

还有 jQuery ajax 调用:

$.ajax({
    beforeSend: function (req) { req.setRequestHeader("Content-Type", "application/json"); },
    contentType: "application/json; charset=utf-8",
    type: "GET",
    url: "http://localhost/Suggest/TestWebSvc.asmx/GetAccounts",
    data: "q='" + element.val() + "'",
    dataType: "json",
    success: testWebSvcSuccess
  });

如您所见,我尝试改用 HTTP GET 动词,希望这样可以加快调用速度。因为它没有,如果可以的话,我可能会将它切换回使用 POST。现在我只关注为什么它在 IE 中超级快而在 Firefox 中超级慢。

版本:jQuery 1.3.2;火狐 3.0.11; IE 8.0.6001.18783(64 位)

感谢您提供的任何见解。

【问题讨论】:

  • 挂起或禁用萤火虫时仍然很慢?我注意到使用 firebug 会对性能产生严重影响。
  • 是的,即使我禁用 Firebug 也一样慢。

标签: asp.net asp.net-ajax jquery asmx


【解决方案1】:

我知道我在这个问题上迟到了,但我不得不处理类似的情况。原来“问题”是使用 http://localhost 而不是 127.0.0.1

IE 使用任一 URL 都执行得很快。 FF 使用 IP 地址很快,但使用 localhost 增加了 1 秒的延迟。

【讨论】:

  • 感谢一百万的回答 - 解决了我几天来一直困扰的问题
【解决方案2】:

因此,我不只是在 Visual Studio 中点击“运行”,而是在 IIS 中创建了一个应用程序并从那里访问该页面 - 现在它在 FireFox 和 IE 中都能快速运行。奇怪...我对此仍然有点警惕 - 我感觉这可能会再次困扰我,但现在看来问题已经解决了。

【讨论】:

  • 哇,有趣。我遇到了同样的问题,但是在 VS 中运行了一个 MVC + Ext JS 应用程序。当 IE 是即时的时,FF(以及 Chrome)永远不会在不到 1 秒的时间内返回 Ajax 帖子。我花了几个小时试图弄清楚这一点,直到我找到了这个线程。安装到 IIS 中,现在它可以在所有浏览器中运行。我认为 MS 以某种方式优化了 VS + IE 组合(令人震惊......)。谢谢你——我真的很害怕我的应用程序将无法使用。
【解决方案3】:

我敢打赌 IE 正在缓存它。出于某种原因,IE is a little more aggressive(旧帖子,但我仍然看到问题)在缓存方面,这可能也不例外。尝试运行几个健全性检查,看看它是否真的在缓存它。

【讨论】:

  • 是的,这是可能的。对于 GET 请求,缓存默认为 true。
  • 当我改用 POST 的时候,IE 还是快,Firefox 还是慢。
  • 我禁用了缓存并且得到了相同的行为。
【解决方案4】:

对不起,这个问题我也迟到了。 Cassini (VS Web Server) + Firefox 对于任何服务器请求(不仅仅是 ajax/webservice 请求)都有已知的性能问题。 127.0.0.1 解决方案是一个修复 - 另一个是更改 Firefox 中的设置:

http://blog.anofsinger.com/2007/08/firefox-slowness-with-cassini-vs-web.html

【讨论】:

    【解决方案5】:

    你使用 beforeSend: 有什么原因吗?

    您可以将内容类型设置为选项,如下所示:

    contentType: "application/json; charset=utf-8"

    另外,为什么不将 Web 方法的 url 设为相对或绝对?我怀疑完整的 uri 会有所作为,但你永远不知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2011-08-03
      • 2023-03-05
      相关资源
      最近更新 更多