У меня есть веб-сервис, написанный с использованием платформы Pyramid, и интерфейс, написанный с использованием jQuery и jQuery Mobile.Что я заметил, так это то, что некоторые вызовы Ajax выполняются в 5-10 раз дольше, используя метод Ajax вместо прямого перехода к URL-адресу в браузере.
Мой Ajax-код выглядит так, сокращенно для краткости:
$.ajax({
url:address,
dataType:'jsonp',
crossDomain: true,
success: function(data)
{
Parsing and other stuff that takes some time...
}});
Теперь я запускаю около 10 из них одновременно по разным URL-адресам, что может быть причиной более медленного ответа, но если я запускаю по одному, то это примерно в 3 разапомедленнее.(30 мс против 90 мс).Я попытался использовать официантку в Pyramid, а также mod_wsgi (1 процесс, 4 потока) с примерно одинаковым результатом.
Мой вопрос: откуда возникают накладные расходы?Пирамида?Веб сервер?JQuery?jQM?.ajax ()?Что я могу сделать, если что-нибудь уменьшить время запроса?
Редактировать: Переключение между JSON и JSONP мало что дает, но дальнейшее тестирование показало, что время очень изменчиво (от 50 мс до 100 мс) от теста дотестовое задание.Однако прямой доступ к сервису через браузер всегда составляет 30 мс +/- 1 мс.
Я проверил это с помощью Firebug, Chrome Web Dev и Fiddler с похожими результатами.При репликации одного из запросов в Fiddler я получаю результат, аналогичный тому, что происходит при переходе непосредственно к ресурсу в браузере.
Вот скриншот из Firebug прогона, в котором я намеренно пытаюсь сделать этомедленнее, выполняя 9 вызовов 5 раз каждый: http://s16.postimage.org/n6t5z1ow5/ajax_Cap.png надеюсь, что это может дать еще несколько подсказок.Серый цвет «блокирует», фиолетовый - «ждет».