JQuery AJAX медленно в Firefox, быстро в IE - PullRequest
4 голосов
/ 24 июня 2009

Я использую jQuery для публикации в веб-службе ASP .NET для реализации пользовательской функции автозаполнения. Код работает отлично, за исключением того, что он медленно работает в FireFox (он не может работать быстрее 1 секунды). IE горит быстро - отлично работает. Я смотрю пост в Firefox, используя Firebug.

Вот код услуги:

<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; Firefox 3.0.11; IE 8.0.6001.18783 (64-разрядная версия)

Спасибо за любые идеи, которые вы можете предоставить.

Ответы [ 5 ]

4 голосов
/ 31 марта 2010

Я знаю, что опоздал на вечеринку по этому вопросу, но мне просто пришлось столкнуться с подобной ситуацией. Оказывается, «проблема» использовала http://localhost вместо 127.0.0.1

IE работал быстро, используя любой URL. FF работал быстро с использованием IP-адреса, но добавил локальную задержку в 1 секунду при использовании localhost.

2 голосов
/ 30 июня 2009

Таким образом, вместо того, чтобы просто нажать «Выполнить» в Visual Studio, я создал приложение в IIS и получил доступ к странице оттуда - теперь оно работает быстро как в FireFox, так и в IE. Странно ... Я все еще немного настороженно отношусь к этому - у меня есть чувство, что это может вернуться, чтобы преследовать меня где-то, но сейчас похоже, что проблема решена.

1 голос
/ 05 июня 2010

Извините, я слишком опоздал на этот вопрос. 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

1 голос
/ 24 июня 2009

Бьюсь об заклад, IE кеширует это. По какой-то причине IE немного агрессивнее (старый пост, но я все еще вижу проблему), когда дело доходит до кэширования, и это, вероятно, не исключение. Попробуйте запустить несколько проверок работоспособности, чтобы увидеть, действительно ли они кешируют.

0 голосов
/ 24 июня 2009

Есть ли причина, по которой вы используете beforeSend:?

Вы можете просто установить тип контента в качестве опции, например так:

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

Кроме того, почему бы не сделать URL-адрес веб-метода относительным или абсолютным? Я сомневаюсь, что полное URI будет иметь значение, но вы никогда не знаете.

...